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}')
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)
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)