def test_as_unique(self): sculptor = Sculptor.as_unique(name="foo") same_sculptor = Sculptor.as_unique(name="foo") another_sculptor = Sculptor.as_unique(name="bar") assert sculptor is same_sculptor assert another_sculptor is not sculptor assert another_sculptor is not same_sculptor
def test_multiple_sculptors_as_unique(self): master = Sculptor.create(name="master") sculptors_in_text = ["master", "newbie"] sculptors = Sculptor.multiple_as_unique(sculptors_in_text) assert isinstance(sculptors, list) assert len(sculptors) == len(sculptors_in_text) assert master in sculptors
def test_worker_has_many_products(self): paintwork = Paintwork(name="someone") sculptor = Sculptor(name="somebody") products = [Product(name="a"), Product(name="b")] paintwork.products.extend(products) sculptor.products.extend(products) paintwork.save() sculptor.save() assert isinstance(paintwork.products, list) assert len(paintwork.products) == 2 assert isinstance(sculptor.products, list) assert len(sculptor.products) == 2
def update_product(product_dataclass: ProductBase, product_model: ProductModel) -> ProductModel: """Should be called in database session. :raise ReleaseInfosConflictError: Unable to sync the release_infos """ release_info_solution = ReleaseInfosSolution() status = ReleaseInfoHelper.compare_infos( product_dataclass.release_infos, product_model.release_infos) while status is not ReleaseInfosStatus.SAME and status is not ReleaseInfosStatus.CONFLICT: release_info_solution.set_situation(status).execute( product_dataclass=product_dataclass, product_model=product_model) status = ReleaseInfoHelper.compare_infos( product_dataclass.release_infos, product_model.release_infos) if status is ReleaseInfosStatus.CONFLICT: raise ReleaseInfosConflictError(product_dataclass.url) # unique attribute series = Series.as_unique(name=product_dataclass.series) manufacturer = Company.as_unique(name=product_dataclass.manufacturer) category = Category.as_unique(name=product_dataclass.category) releaser = Company.as_unique(name=product_dataclass.releaser) distributer = Company.as_unique(name=product_dataclass.distributer) # unique in list attribute paintworks = Paintwork.multiple_as_unique(product_dataclass.paintworks) sculptors = Sculptor.multiple_as_unique(product_dataclass.sculptors) product_model.update( url=product_dataclass.url, name=product_dataclass.name, size=product_dataclass.size, scale=product_dataclass.scale, rerelease=product_model.rerelease or product_dataclass.rerelease, adult=product_dataclass.adult, copyright=product_dataclass.copyright, series=series, manufacturer=manufacturer, releaser=releaser, distributer=distributer, category=category, id_by_official=product_dataclass.maker_id, checksum=product_dataclass.checksum, order_period_start=product_dataclass.order_period.start, order_period_end=product_dataclass.order_period.end, thumbnail=product_dataclass.thumbnail, og_image=product_dataclass.og_image, jan=product_dataclass.jan, # relationship sculptors=sculptors, paintworks=paintworks, ) return product_model
def test_product_belongs_to_many_worker(self): product = Product(name="foo") p1 = Paintwork(name="p1") p2 = Paintwork(name="p2") s1 = Sculptor(name="s1") s2 = Sculptor(name="s2") product.sculptors.append(s1) product.sculptors.append(s2) product.paintworks.append(p1) product.paintworks.append(p2) product.save() assert isinstance(product.sculptors, list) assert len(product.sculptors) == 2 assert isinstance(product.paintworks, list) assert len(product.paintworks) == 2
def test_delete_product_and_association_but_not_effect_worker(self, session): from figure_hook.Models.relation_table import (product_paintwork_table, product_sculptor_table) p = Product(name="foo") master = Sculptor(name="master") newbie = Paintwork(name="newbie") p.paintworks.append(newbie) p.sculptors.append(master) p.save() session.commit() Product.destroy([p.id]) session.commit() s_asso = session.query(product_sculptor_table).all() p_asso = session.query(product_paintwork_table).all() assert not s_asso assert not p_asso assert Sculptor.all() assert Paintwork.all()
def create_product(product_dataclass: ProductBase) -> ProductModel: series = Series.as_unique(name=product_dataclass.series) manufacturer = Company.as_unique(name=product_dataclass.manufacturer) category = Category.as_unique(name=product_dataclass.category) releaser = Company.as_unique(name=product_dataclass.releaser) distributer = Company.as_unique(name=product_dataclass.distributer) paintworks = Paintwork.multiple_as_unique(product_dataclass.paintworks) sculptors = Sculptor.multiple_as_unique(product_dataclass.sculptors) images = ProductOfficialImage.create_image_list( product_dataclass.images) release_infos: List[ProductReleaseInfo] = [] for release in product_dataclass.release_infos: release_info = ProductReleaseInfo( price=release.price, initial_release_date=release.release_date, announced_at=release.announced_at) if release.price: release_info.tax_including = release.price.tax_including release_infos.append(release_info) product = ProductModel.create( url=product_dataclass.url, name=product_dataclass.name, size=product_dataclass.size, scale=product_dataclass.scale, rerelease=product_dataclass.rerelease, adult=product_dataclass.adult, copyright=product_dataclass.copyright, series=series, manufacturer=manufacturer, releaser=releaser, distributer=distributer, category=category, id_by_official=product_dataclass.maker_id, checksum=product_dataclass.checksum, jan=product_dataclass.jan, order_period_start=product_dataclass.order_period.start, order_period_end=product_dataclass.order_period.end, thumbnail=product_dataclass.thumbnail, og_image=product_dataclass.og_image, # relationship release_infos=release_infos, sculptors=sculptors, paintworks=paintworks, official_images=images) return product
def test_get_by_id(self): sculptor = Sculptor.create(name="foo") fetched_sculptor = Sculptor.get_by_id(sculptor.id) # type: ignore assert fetched_sculptor is sculptor