class MigrationTests(MigrationTestCase):

    create_model = migrations.CreateModel('textdocument', [
        ('title', models.CharField(max_length=128)),
        ('body', models.TextField()),
        ('search', SearchVectorField([WeightedColumn('body', 'A')],
                                     'english')),
    ])

    delete_model = migrations.DeleteModel('textdocument')

    create_model_without_search = migrations.CreateModel(
        'textdocument', [
            ('body', models.TextField()),
        ])

    add_field = migrations.AddField(
        'textdocument', 'search',
        SearchVectorField([WeightedColumn('body', 'A')], 'english'))

    alter_field = migrations.AlterField(
        'textdocument', 'search',
        SearchVectorField(
            [WeightedColumn('title', 'A'),
             WeightedColumn('body', 'D')], 'english'))

    remove_field = migrations.RemoveField('textdocument', 'search')

    def test_create_model(self):
        self.assertFITNotExists()
        self.migrate([self.create_model])
        self.assertFITExists()

    def test_add_field(self):
        self.assertFITNotExists()
        state = self.migrate([self.create_model_without_search])
        self.assertFITNotExists()
        self.migrate([self.add_field], state)
        self.assertFITExists()

    def test_remove_field(self):
        self.assertFITNotExists()
        state = self.migrate([self.create_model])
        self.assertFITExists()
        self.migrate([self.remove_field], state)
        self.assertFITNotExists()

    def test_alter_field(self):
        state = self.migrate([self.create_model])
        self.assertFITExists()
        self.assertNotIn('title', self.get_function_src('search'))
        self.migrate([self.alter_field], state)
        self.assertFITExists()
        self.assertIn('title', self.get_function_src('search'))

    def test_delete_model(self):
        state = self.migrate([self.create_model])
        self.assertFITExists()
        self.migrate([self.delete_model], state)
        self.assertFITNotExists()
class DataMigrationTests(MigrationTestCase):

    create_model = migrations.CreateModel('textdocument', [
        ('body', models.TextField()),
    ])

    add_field = migrations.AddField(
        'textdocument', 'search',
        SearchVectorField([WeightedColumn('body', 'A')], 'english'))

    run_indexer = IndexSearchVector('textdocument', 'search')

    def initial_state(self):
        state = self.migrate([self.create_model])
        state.apps.get_model('tests.textdocument').objects.create(
            body="My hovercraft is full of eels.")
        return state

    def test_add_field_no_data_migration(self):
        state = self.initial_state()
        self.migrate([self.add_field], state)
        doc = state.apps.get_model('tests.textdocument').objects.first()
        self.assertIsNone(doc.search)

    def test_add_field_including_data_migration(self):
        state = self.initial_state()
        self.migrate([self.add_field, self.run_indexer], state)
        doc = state.apps.get_model('tests.textdocument').objects.first()
        self.assertEqual(doc.search, "'eel':6A 'full':4A 'hovercraft':2A")
Esempio n. 3
0
 class TextDocument(models.Model):
     title = models.CharField(max_length=128)
     title2 = models.CharField(max_length=128, db_column='body')
     search = SearchVectorField([
         WeightedColumn('title', 'A'),
         WeightedColumn('body', 'D')
     ], language='english')
Esempio n. 4
0
 def test_deconstruct_with_no_arguments(self):
     svf = SearchVectorField()
     self.assertEqual(
         ("tsvector_field.SearchVectorField()",
          {'import tsvector_field'}),
         MigrationWriter.serialize(svf)
     )
 class TextDocument(models.Model):
     svf = SearchVectorField([
         WeightedColumn('name', 'A'),
         WeightedColumn('description', 'D'),
     ],
                             language='english',
                             language_column='lang',
                             force_update=True)
    def test_deconstruct_default_arguments(self):

        svf = SearchVectorField([
            WeightedColumn('name', 'A'),
            WeightedColumn('description', 'D'),
        ],
                                language=None,
                                language_column=None,
                                force_update=False)

        definition, path = MigrationWriter.serialize(svf)

        self.assertEqual(
            "tsvector_field.SearchVectorField("
            "columns=["
            "tsvector_field.WeightedColumn('name', 'A'), "
            "tsvector_field.WeightedColumn('description', 'D')]"
            ")", definition)

        self.assertSetEqual({'import tsvector_field'}, path)
Esempio n. 7
0
 class TextDocument(models.Model):
     search = SearchVectorField(language=1)
Esempio n. 8
0
 class TextDocument(models.Model):
     title = models.CharField(max_length=128)
     search = SearchVectorField([
         WeightedColumn('title', 'A')
     ])
Esempio n. 9
0
 class TextDocument(models.Model):
     title = models.CharField(max_length=128)
     search = SearchVectorField([
         ('title', 'A')
     ], language='english')
Esempio n. 10
0
 class TextDocument(models.Model):
     search = SearchVectorField([
         WeightedColumn('title', 'A')
     ], language='english')
 class ThreeColumns(models.Model):
     search = SearchVectorField([
         WeightedColumn('name', 'A'),
         WeightedColumn('title', 'B'),
         WeightedColumn('body', 'C'),
     ])
Esempio n. 12
0
 class TextDocument(models.Model):
     title = models.CharField(max_length=128)
     search = SearchVectorField([
         WeightedColumn('body', 'A'),
         WeightedColumn('name', 'X')
     ], language=9, force_update=False)
 class WithLanguageAndLanguageColumn(models.Model):
     search = SearchVectorField([
         WeightedColumn('body', 'D'),
     ],
                                language='ukrainian',
                                language_column='lang')
 class OneColumn(models.Model):
     search = SearchVectorField([
         WeightedColumn('name', 'A'),
     ])
Esempio n. 15
0
 class TextDocument(models.Model):
     title = models.CharField(max_length=128)
     search = SearchVectorField(language_column='body')
 class TextDocument(models.Model):
     search = SearchVectorField([
         WeightedColumn('title', 'A'),
         WeightedColumn('body', 'D'),
     ], 'english')
 class TextDocumentForceUpdate(models.Model):
     search = SearchVectorField([
         WeightedColumn('body', 'D'),
     ],
                                'english',
                                force_update=True)
 class NoWeightedColumns(models.Model):
     search = SearchVectorField()
Esempio n. 19
0
 class TextDocument(models.Model):
     search = SearchVectorField(force_update='invalid')
 class WithLanguageTwoColumn(models.Model):
     search = SearchVectorField([
         WeightedColumn('title', 'A'),
         WeightedColumn('body', 'D'),
     ],
                                language='ukrainian')