Exemple #1
0
class TestForwardMigrations(MigratorTestCase):
    """
    Test entire schema migration sequence for the users app
    """

    migrate_from = ('users', helpers.getOldestMigrationFile('users'))
    migrate_to = ('users', helpers.getNewestMigrationFile('users'))

    def prepare(self):

        User = self.old_state.apps.get_model('auth', 'user')

        User.objects.create(username='******',
                            email='*****@*****.**',
                            password='******')

        User.objects.create(username='******',
                            email='*****@*****.**',
                            password='******')

    def test_users_exist(self):

        User = self.new_state.apps.get_model('auth', 'user')

        self.assertEqual(User.objects.count(), 2)
class TestReferencePatternMigration(MigratorTestCase):
    """Unit test for data migration which converts reference to new format.

    Ref: https://github.com/inventree/InvenTree/pull/3267
    """

    migrate_from = ('build', '0019_auto_20201019_1302')
    migrate_to = ('build', helpers.getNewestMigrationFile('build'))

    def prepare(self):
        """Create some initial data prior to migration"""

        Setting = self.old_state.apps.get_model('common', 'inventreesetting')

        # Create a custom existing prefix so we can confirm the operation is working
        Setting.objects.create(
            key='BUILDORDER_REFERENCE_PREFIX',
            value='BuildOrder-',
        )

        Part = self.old_state.apps.get_model('part', 'part')

        assembly = Part.objects.create(
            name='Assy 1',
            description='An assembly',
            level=0,
            lft=0,
            rght=0,
            tree_id=0,
        )

        Build = self.old_state.apps.get_model('build', 'build')

        for idx in range(1, 11):
            Build.objects.create(
                part=assembly,
                title=f"Build {idx}",
                quantity=idx,
                reference=f"{idx + 100}",
                level=0,
                lft=0,
                rght=0,
                tree_id=0,
            )

    def test_reference_migration(self):
        """Test that the reference fields have been correctly updated"""

        Build = self.new_state.apps.get_model('build', 'build')

        for build in Build.objects.all():
            self.assertTrue(build.reference.startswith('BuildOrder-'))

        Setting = self.new_state.apps.get_model('common', 'inventreesetting')

        pattern = Setting.objects.get(key='BUILDORDER_REFERENCE_PATTERN')

        self.assertEqual(pattern.value, 'BuildOrder-{ref:04d}')
Exemple #3
0
class TestForwardMigrations(MigratorTestCase):
    """
    Test entire schema migration sequence for the build app
    """

    migrate_from = ('build', helpers.getOldestMigrationFile('build'))
    migrate_to = ('build', helpers.getNewestMigrationFile('build'))

    def prepare(self):
        """
        Create initial data!
        """

        Part = self.old_state.apps.get_model('part', 'part')

        buildable_part = Part.objects.create(
            name='Widget',
            description='Buildable Part',
            active=True,
        )

        with self.assertRaises(TypeError):
            # Cannot set the 'assembly' field as it hasn't been added to the db schema
            Part.objects.create(name='Blorb',
                                description='ABCDE',
                                assembly=True)

        Build = self.old_state.apps.get_model('build', 'build')

        Build.objects.create(part=buildable_part,
                             title='A build of some stuff',
                             quantity=50)

    def test_items_exist(self):

        Part = self.new_state.apps.get_model('part', 'part')

        self.assertEqual(Part.objects.count(), 1)

        Build = self.new_state.apps.get_model('build', 'build')

        self.assertEqual(Build.objects.count(), 1)

        # Check that the part object now has an assembly field
        part = Part.objects.all().first()
        part.assembly = True
        part.save()
        part.assembly = False
        part.save()
class TestForwardMigrations(MigratorTestCase):
    """
    Test entire schema migration
    """

    migrate_from = ('order', helpers.getOldestMigrationFile('order'))
    migrate_to = ('order', helpers.getNewestMigrationFile('order'))

    def prepare(self):
        """
        Create initial data set
        """

        # Create a purchase order from a supplier
        Company = self.old_state.apps.get_model('company', 'company')

        supplier = Company.objects.create(name='Supplier A',
                                          description='A great supplier!',
                                          is_supplier=True)

        PurchaseOrder = self.old_state.apps.get_model('order', 'purchaseorder')

        # Create some orders
        for ii in range(10):

            order = PurchaseOrder.objects.create(
                supplier=supplier,
                reference=f"{ii}-abcde",
                description="Just a test order")

            # Initially, the 'reference_int' field is unavailable
            with self.assertRaises(AttributeError):
                print(order.reference_int)

    def test_ref_field(self):
        """
        Test that the 'reference_int' field has been created and is filled out correctly
        """

        PurchaseOrder = self.new_state.apps.get_model('order', 'purchaseorder')

        for ii in range(10):

            order = PurchaseOrder.objects.get(reference=f"{ii}-abcde")

            # The integer reference field must have been correctly updated
        self.assertEqual(order.reference_int, ii)
class TestForwardMigrations(MigratorTestCase):
    """Unit testing class for testing 'company' app migrations"""

    migrate_from = ('company', helpers.getOldestMigrationFile('company'))
    migrate_to = ('company', helpers.getNewestMigrationFile('company'))

    def prepare(self):
        """Create some simple Company data, and ensure that it migrates OK."""
        Company = self.old_state.apps.get_model('company', 'company')

        Company.objects.create(name='MSPC',
                               description='Michael Scotts Paper Company',
                               is_supplier=True)

    def test_migrations(self):
        """Test the database state after applying all migrations"""
        Company = self.new_state.apps.get_model('company', 'company')

        self.assertEqual(Company.objects.count(), 1)
Exemple #6
0
class TestForwardMigrations(MigratorTestCase):
    """
    Test entire schema migration sequence for the part app
    """

    migrate_from = ('part', helpers.getOldestMigrationFile('part'))
    migrate_to = ('part', helpers.getNewestMigrationFile('part'))

    def prepare(self):
        """
        Create initial data
        """

        Part = self.old_state.apps.get_model('part', 'part')

        Part.objects.create(name='A', description='My part A')
        Part.objects.create(name='B', description='My part B')
        Part.objects.create(name='C', description='My part C')
        Part.objects.create(name='D', description='My part D')
        Part.objects.create(name='E', description='My part E')

        # Extract one part object to investigate
        p = Part.objects.all().last()

        # Initially some fields are not present
        with self.assertRaises(AttributeError):
            print(p.has_variants)

        with self.assertRaises(AttributeError):
            print(p.is_template)

    def test_models_exist(self):

        Part = self.new_state.apps.get_model('part', 'part')

        self.assertEqual(Part.objects.count(), 5)

        for part in Part.objects.all():
            part.is_template = True
            part.save()
            part.is_template = False
            part.save()
class TestSerialNumberMigration(MigratorTestCase):
    """Test data migration which updates serial numbers"""

    migrate_from = ('stock', '0067_alter_stockitem_part')
    migrate_to = ('stock', helpers.getNewestMigrationFile('stock'))

    def prepare(self):
        """Create initial data for this migration"""

        Part = self.old_state.apps.get_model('part', 'part')
        StockItem = self.old_state.apps.get_model('stock', 'stockitem')

        # Create a base part
        my_part = Part.objects.create(
            name='PART-123',
            description='Some part',
            active=True,
            trackable=True,
            level=0,
            tree_id=0,
            lft=0, rght=0
        )

        # Create some serialized stock items
        for sn in range(10, 20):
            StockItem.objects.create(
                part=my_part,
                quantity=1,
                serial=sn,
                level=0,
                tree_id=0,
                lft=0, rght=0
            )

        # Create a stock item with a very large serial number
        item = StockItem.objects.create(
            part=my_part,
            quantity=1,
            serial='9999999999999999999999999999999999999999999999999999999999999',
            level=0,
            tree_id=0,
            lft=0, rght=0
        )

        self.big_ref_pk = item.pk

    def test_migrations(self):
        """Test that the migrations have been applied correctly"""

        StockItem = self.new_state.apps.get_model('stock', 'stockitem')

        # Check that the serial number integer conversion has been applied correctly
        for sn in range(10, 20):
            item = StockItem.objects.get(serial_int=sn)

            self.assertEqual(item.serial, str(sn))

        big_ref_item = StockItem.objects.get(pk=self.big_ref_pk)

        # Check that the StockItem maximum serial number
        self.assertEqual(big_ref_item.serial, '9999999999999999999999999999999999999999999999999999999999999')
        self.assertEqual(big_ref_item.serial_int, 0x7fffffff)