Skip to content

Instantly share code, notes, and snippets.

@cassioeskelsen
Created June 15, 2021 13:16
Show Gist options
  • Save cassioeskelsen/80e0a31516b6b32ff7a8963a34b2d13d to your computer and use it in GitHub Desktop.
Save cassioeskelsen/80e0a31516b6b32ff7a8963a34b2d13d to your computer and use it in GitHub Desktop.
import unittest
from pyravendb.commands.raven_commands import GetDocumentCommand
from pyravendb.custom_exceptions.exceptions import InvalidOperationException
from pyravendb.data.document_conventions import DocumentConventions
from pyravendb.tests.test_base import TestBase
class Address:
def __init__(self, street, city, state):
self.street = street
self.city = city
self.state = state
self.Id: str = None
class Customer:
def __init__(self, name):
self.name = name
self.Id: str = None
class SomeClass:
def __init__(self, name):
self.name = name
self.Id: str = None
class Category:
def __init__(self, name):
self.name = name
class OrderItem:
def __init__(self, product_id, quantity):
self.product_id = product_id
self.quantity = quantity
class Company:
def __init__(self, name):
self.name = name
class CompanyOwner:
def __init__(self, name):
self.name = name
class DemoStat:
def __init__(self):
pass
class TesteCollectionName(TestBase):
def setUp(self):
self.setConvention(DocumentConventions(collection_names={Address: 'Address', SomeClass: 'SomeNewCoolName'}))
super(TesteCollectionName, self).setUp()
self.requests_executor = self.store.get_request_executor()
def tearDown(self):
super(TesteCollectionName, self).tearDown()
self.delete_all_topology_files()
def test_change_names_in_document_convention(self):
dc = DocumentConventions(collection_names={SomeClass: 'SomeClass123'})
dc.default_collection_names.update({Address: 'Address123'})
dc.default_collection_names.update({Customer: 'Customer123'})
assert dc.get_collection_name(SomeClass) == 'SomeClass123'
assert dc.get_collection_name(Address) == 'Address123'
assert dc.get_collection_name(Customer) == 'Customer123'
def test_transform_type_name(self):
dc = DocumentConventions()
assert "companies" == dc.default_transform_type_tag_name(Company("Test"))
assert "CompanyOwners" == dc.default_transform_type_tag_name(CompanyOwner("Test Test"))
assert "OrderItems" == dc.default_transform_type_tag_name(OrderItem(1, 1))
assert "categories" == dc.default_transform_type_tag_name(Category("category"))
assert "DemoStats" == dc.default_transform_type_tag_name(DemoStat())
def test_id_prefix_default(self):
with self.store.open_session() as session:
c = Customer(name="John")
session.store(c)
session.save_changes()
assert c.Id.startswith('customers/')
def test_collection_name_default(self):
with self.store.open_session() as session:
c = Customer(name="John")
session.store(c, key="customer/123123-ABC")
session.save_changes()
response = self.requests_executor.execute(GetDocumentCommand("customer/123123-ABC"))
assert response["Results"][0]["@metadata"]["@collection"] == "Customers"
def test_id_prefix_custom(self):
with self.store.open_session() as session:
c = Address(street='Baker Street', city='Westminster', state='London')
session.store(c)
session.save_changes()
assert c.Id.startswith('address/')
def test_collection_name_custom(self):
with self.store.open_session() as session:
c = Address(street='Baker Street', city='Westminster', state='London')
session.store(c, key="address/123-A")
session.save_changes()
response = self.requests_executor.execute(GetDocumentCommand("address/123-A"))
assert response["Results"][0]["@metadata"]["@collection"] == "Address"
def test_id_prefix_custom_composite_name(self):
with self.store.open_session() as session:
c = SomeClass(name="xpto")
session.store(c)
session.save_changes()
assert c.Id.startswith('SomeNewCoolName/')
def test_collection_name_custom_composite_name(self):
with self.store.open_session() as session:
c = SomeClass(name="xpto")
session.store(c, key="SomeNewCoolName/111-A")
session.save_changes()
response = self.requests_executor.execute(GetDocumentCommand("SomeNewCoolName/111-A"))
assert response["Results"][0]["@metadata"]["@collection"] == "SomeNewCoolName"
def test_shouldnt_allow_change_after_initialize(self):
with self.assertRaises(InvalidOperationException) as context:
self.store.conventions.default_collection_names = {Address: 'Addresses'}
if __name__ == "__main__":
unittest.main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment