mirror of
https://github.com/inventree/InvenTree
synced 2024-08-30 18:33:04 +00:00
Test troublesome migration 0019
This commit is contained in:
parent
1d317b1ecb
commit
34dbfe6d28
@ -1,14 +1,21 @@
|
||||
# Generated by Django 2.2.10 on 2020-04-13 06:42
|
||||
|
||||
import sys
|
||||
import os
|
||||
from rapidfuzz import fuzz
|
||||
|
||||
from django.db import migrations, connection
|
||||
from django.db.utils import OperationalError, ProgrammingError
|
||||
|
||||
"""
|
||||
When this migration is tested by CI, it cannot accept user input.
|
||||
So a simplified version of the migration is implemented.
|
||||
"""
|
||||
TESTING = 'test' in sys.argv
|
||||
|
||||
def clear():
|
||||
os.system('cls' if os.name == 'nt' else 'clear')
|
||||
if not TESTING:
|
||||
os.system('cls' if os.name == 'nt' else 'clear')
|
||||
|
||||
|
||||
def reverse_association(apps, schema_editor):
|
||||
@ -222,23 +229,31 @@ def associate_manufacturers(apps, schema_editor):
|
||||
clear()
|
||||
|
||||
# Present a list of options
|
||||
print("----------------------------------")
|
||||
if not TESTING:
|
||||
print("----------------------------------")
|
||||
|
||||
print("Checking part [{pk}] ({idx} of {total})".format(pk=part_id, idx=idx+1, total=total))
|
||||
print("Manufacturer name: '{n}'".format(n=name))
|
||||
print("----------------------------------")
|
||||
print("Select an option from the list below:")
|
||||
|
||||
if not TESTING:
|
||||
print("Manufacturer name: '{n}'".format(n=name))
|
||||
print("----------------------------------")
|
||||
print("Select an option from the list below:")
|
||||
|
||||
print("0) - Create new manufacturer '{n}'".format(n=name))
|
||||
print("")
|
||||
print("0) - Create new manufacturer '{n}'".format(n=name))
|
||||
print("")
|
||||
|
||||
for i, m in enumerate(matches[:10]):
|
||||
print("{i}) - Use manufacturer '{opt}'".format(i=i+1, opt=m))
|
||||
for i, m in enumerate(matches[:10]):
|
||||
print("{i}) - Use manufacturer '{opt}'".format(i=i+1, opt=m))
|
||||
|
||||
print("")
|
||||
print("OR - Type a new custom manufacturer name")
|
||||
print("")
|
||||
print("OR - Type a new custom manufacturer name")
|
||||
|
||||
while True:
|
||||
response = str(input("> ")).strip()
|
||||
if TESTING:
|
||||
# When running unit tests, simply select the name of the part
|
||||
response = '0'
|
||||
else:
|
||||
response = str(input("> ")).strip()
|
||||
|
||||
# Attempt to parse user response as an integer
|
||||
try:
|
||||
@ -300,18 +315,19 @@ def associate_manufacturers(apps, schema_editor):
|
||||
print("")
|
||||
clear()
|
||||
|
||||
print("---------------------------------------")
|
||||
print("The SupplierPart model needs to be migrated,")
|
||||
print("as the new 'manufacturer' field maps to a 'Company' reference.")
|
||||
print("The existing 'manufacturer_name' field will be used to match")
|
||||
print("against possible companies.")
|
||||
print("This process requires user input.")
|
||||
print("")
|
||||
print("Note: This process MUST be completed to migrate the database.")
|
||||
print("---------------------------------------")
|
||||
print("")
|
||||
if not TESTING:
|
||||
print("---------------------------------------")
|
||||
print("The SupplierPart model needs to be migrated,")
|
||||
print("as the new 'manufacturer' field maps to a 'Company' reference.")
|
||||
print("The existing 'manufacturer_name' field will be used to match")
|
||||
print("against possible companies.")
|
||||
print("This process requires user input.")
|
||||
print("")
|
||||
print("Note: This process MUST be completed to migrate the database.")
|
||||
print("---------------------------------------")
|
||||
print("")
|
||||
|
||||
input("Press <ENTER> to continue.")
|
||||
input("Press <ENTER> to continue.")
|
||||
|
||||
clear()
|
||||
|
||||
|
80
InvenTree/company/test_migrations.py
Normal file
80
InvenTree/company/test_migrations.py
Normal file
@ -0,0 +1,80 @@
|
||||
"""
|
||||
Tests for the company model database migrations
|
||||
"""
|
||||
|
||||
from django_test_migrations.contrib.unittest_case import MigratorTestCase
|
||||
|
||||
|
||||
class TestManufacturerField(MigratorTestCase):
|
||||
"""
|
||||
Tests for migration 0019 which migrates from old 'manufacturer_name' field to new 'manufacturer' field
|
||||
"""
|
||||
|
||||
migrate_from = ('company', '0018_supplierpart_manufacturer')
|
||||
migrate_to = ('company', '0019_auto_20200413_0642')
|
||||
|
||||
def prepare(self):
|
||||
"""
|
||||
Prepare the database by adding some test data 'before' the change:
|
||||
|
||||
- Part object
|
||||
- Company object (supplier)
|
||||
- SupplierPart object
|
||||
"""
|
||||
|
||||
Part = self.old_state.apps.get_model('part', 'part')
|
||||
Company = self.old_state.apps.get_model('company', 'company')
|
||||
SupplierPart = self.old_state.apps.get_model('company', 'supplierpart')
|
||||
|
||||
# Create an initial part
|
||||
part = Part.objects.create(
|
||||
name='Screw',
|
||||
description='A single screw'
|
||||
)
|
||||
|
||||
# Create a company to act as the supplier
|
||||
supplier = Company.objects.create(
|
||||
name='Supplier',
|
||||
description='A supplier of parts',
|
||||
is_supplier=True,
|
||||
is_customer=False,
|
||||
)
|
||||
|
||||
# Add some SupplierPart objects
|
||||
SupplierPart.objects.create(
|
||||
part=part,
|
||||
supplier=supplier,
|
||||
SKU='SCREW.001',
|
||||
manufacturer_name='ACME',
|
||||
)
|
||||
|
||||
SupplierPart.objects.create(
|
||||
part=part,
|
||||
supplier=supplier,
|
||||
SKU='SCREW.002',
|
||||
manufacturer_name='Zero Corp'
|
||||
)
|
||||
|
||||
self.assertEqual(Company.objects.count(), 1)
|
||||
|
||||
def test_company_objects(self):
|
||||
"""
|
||||
Test that the new companies have been created successfully
|
||||
"""
|
||||
|
||||
# Two additional company objects should have been created
|
||||
Company = self.new_state.apps.get_model('company', 'company')
|
||||
self.assertEqual(Company.objects.count(), 3)
|
||||
|
||||
# The new company/ies must be marked as "manufacturers"
|
||||
acme = Company.objects.get(name='ACME')
|
||||
self.assertTrue(acme.is_manufacturer)
|
||||
|
||||
SupplierPart = self.new_state.apps.get_model('company', 'supplierpart')
|
||||
parts = SupplierPart.objects.filter(manufacturer=acme)
|
||||
self.assertEqual(parts.count(), 1)
|
||||
part = parts.first()
|
||||
|
||||
# Checks on the SupplierPart object
|
||||
self.assertEqual(part.manufacturer_name, 'ACME')
|
||||
self.assertEqual(part.manufacturer.name, 'ACME')
|
Loading…
Reference in New Issue
Block a user