Esempio n. 1
0
    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
Esempio n. 2
0
    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
Esempio n. 3
0
    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
Esempio n. 4
0
    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
Esempio n. 5
0
    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
Esempio n. 6
0
    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()
Esempio n. 7
0
    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
Esempio n. 8
0
    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