示例#1
0
 def test_create_non_deterministic_collation(self):
     operation = CreateCollation(
         'case_insensitive_test',
         'und-u-ks-level2',
         provider='icu',
         deterministic=False,
     )
     project_state = ProjectState()
     new_state = project_state.clone()
     # Create a collation.
     with CaptureQueriesContext(connection) as captured_queries:
         with connection.schema_editor(atomic=False) as editor:
             operation.database_forwards(self.app_label, editor,
                                         project_state, new_state)
     self.assertEqual(len(captured_queries), 1)
     self.assertIn('CREATE COLLATION', captured_queries[0]['sql'])
     # Reversal.
     with CaptureQueriesContext(connection) as captured_queries:
         with connection.schema_editor(atomic=False) as editor:
             operation.database_backwards(self.app_label, editor, new_state,
                                          project_state)
     self.assertEqual(len(captured_queries), 1)
     self.assertIn('DROP COLLATION', captured_queries[0]['sql'])
     # Deconstruction.
     name, args, kwargs = operation.deconstruct()
     self.assertEqual(name, 'CreateCollation')
     self.assertEqual(args, [])
     self.assertEqual(
         kwargs, {
             'name': 'case_insensitive_test',
             'locale': 'und-u-ks-level2',
             'provider': 'icu',
             'deterministic': False,
         })
示例#2
0
 def test_create(self):
     operation = CreateCollation('C_test', locale='C')
     self.assertEqual(operation.migration_name_fragment,
                      'create_collation_c_test')
     self.assertEqual(operation.describe(), 'Create collation C_test')
     project_state = ProjectState()
     new_state = project_state.clone()
     # Create a collation.
     with CaptureQueriesContext(connection) as captured_queries:
         with connection.schema_editor(atomic=False) as editor:
             operation.database_forwards(self.app_label, editor,
                                         project_state, new_state)
     self.assertEqual(len(captured_queries), 1)
     self.assertIn('CREATE COLLATION', captured_queries[0]['sql'])
     # Creating the same collation raises an exception.
     with self.assertRaisesMessage(ProgrammingError, 'already exists'):
         with connection.schema_editor(atomic=True) as editor:
             operation.database_forwards(self.app_label, editor,
                                         project_state, new_state)
     # Reversal.
     with CaptureQueriesContext(connection) as captured_queries:
         with connection.schema_editor(atomic=False) as editor:
             operation.database_backwards(self.app_label, editor, new_state,
                                          project_state)
     self.assertEqual(len(captured_queries), 1)
     self.assertIn('DROP COLLATION', captured_queries[0]['sql'])
     # Deconstruction.
     name, args, kwargs = operation.deconstruct()
     self.assertEqual(name, 'CreateCollation')
     self.assertEqual(args, [])
     self.assertEqual(kwargs, {'name': 'C_test', 'locale': 'C'})
示例#3
0
 def test_create(self):
     operation = CreateCollation("C_test", locale="C")
     self.assertEqual(operation.migration_name_fragment, "create_collation_c_test")
     self.assertEqual(operation.describe(), "Create collation C_test")
     project_state = ProjectState()
     new_state = project_state.clone()
     # Create a collation.
     with CaptureQueriesContext(connection) as captured_queries:
         with connection.schema_editor(atomic=False) as editor:
             operation.database_forwards(
                 self.app_label, editor, project_state, new_state
             )
     self.assertEqual(len(captured_queries), 1)
     self.assertIn("CREATE COLLATION", captured_queries[0]["sql"])
     # Creating the same collation raises an exception.
     with self.assertRaisesMessage(ProgrammingError, "already exists"):
         with connection.schema_editor(atomic=True) as editor:
             operation.database_forwards(
                 self.app_label, editor, project_state, new_state
             )
     # Reversal.
     with CaptureQueriesContext(connection) as captured_queries:
         with connection.schema_editor(atomic=False) as editor:
             operation.database_backwards(
                 self.app_label, editor, new_state, project_state
             )
     self.assertEqual(len(captured_queries), 1)
     self.assertIn("DROP COLLATION", captured_queries[0]["sql"])
     # Deconstruction.
     name, args, kwargs = operation.deconstruct()
     self.assertEqual(name, "CreateCollation")
     self.assertEqual(args, [])
     self.assertEqual(kwargs, {"name": "C_test", "locale": "C"})
示例#4
0
 def test_no_allow_migrate(self):
     operation = CreateCollation('C_test', locale='C')
     project_state = ProjectState()
     new_state = project_state.clone()
     # Don't create a collation.
     with CaptureQueriesContext(connection) as captured_queries:
         with connection.schema_editor(atomic=False) as editor:
             operation.database_forwards(self.app_label, editor,
                                         project_state, new_state)
     self.assertEqual(len(captured_queries), 0)
     # Reversal.
     with CaptureQueriesContext(connection) as captured_queries:
         with connection.schema_editor(atomic=False) as editor:
             operation.database_backwards(self.app_label, editor, new_state,
                                          project_state)
     self.assertEqual(len(captured_queries), 0)
 def test_collation_with_icu_provider_raises_error(self):
     operation = CreateCollation(
         'german_phonebook',
         provider='icu',
         locale='de-u-co-phonebk',
     )
     project_state = ProjectState()
     new_state = project_state.clone()
     msg = 'Non-libc providers require PostgreSQL 10+.'
     with connection.schema_editor(atomic=False) as editor:
         with mock.patch(
                 'django.db.backends.postgresql.features.DatabaseFeatures.'
                 'supports_alternate_collation_providers',
                 False,
         ):
             with self.assertRaisesMessage(NotSupportedError, msg):
                 operation.database_forwards(self.app_label, editor,
                                             project_state, new_state)
示例#6
0
 def test_nondeterministic_collation_not_supported(self):
     operation = CreateCollation(
         'case_insensitive_test',
         provider='icu',
         locale='und-u-ks-level2',
         deterministic=False,
     )
     project_state = ProjectState()
     new_state = project_state.clone()
     msg = 'Non-deterministic collations require PostgreSQL 12+.'
     with connection.schema_editor(atomic=False) as editor:
         with mock.patch(
                 'django.db.backends.postgresql.features.DatabaseFeatures.'
                 'supports_non_deterministic_collations',
                 False,
         ):
             with self.assertRaisesMessage(NotSupportedError, msg):
                 operation.database_forwards(self.app_label, editor,
                                             project_state, new_state)
示例#7
0
 def test_create_collation_alternate_provider(self):
     operation = CreateCollation(
         'german_phonebook_test',
         provider='icu',
         locale='de-u-co-phonebk',
     )
     project_state = ProjectState()
     new_state = project_state.clone()
     # Create an collation.
     with CaptureQueriesContext(connection) as captured_queries:
         with connection.schema_editor(atomic=False) as editor:
             operation.database_forwards(self.app_label, editor,
                                         project_state, new_state)
     self.assertEqual(len(captured_queries), 1)
     self.assertIn('CREATE COLLATION', captured_queries[0]['sql'])
     # Reversal.
     with CaptureQueriesContext(connection) as captured_queries:
         with connection.schema_editor(atomic=False) as editor:
             operation.database_backwards(self.app_label, editor, new_state,
                                          project_state)
     self.assertEqual(len(captured_queries), 1)
     self.assertIn('DROP COLLATION', captured_queries[0]['sql'])
示例#8
0
 def test_create_non_deterministic_collation(self):
     operation = CreateCollation(
         "case_insensitive_test",
         "und-u-ks-level2",
         provider="icu",
         deterministic=False,
     )
     project_state = ProjectState()
     new_state = project_state.clone()
     # Create a collation.
     with CaptureQueriesContext(connection) as captured_queries:
         with connection.schema_editor(atomic=False) as editor:
             operation.database_forwards(
                 self.app_label, editor, project_state, new_state
             )
     self.assertEqual(len(captured_queries), 1)
     self.assertIn("CREATE COLLATION", captured_queries[0]["sql"])
     # Reversal.
     with CaptureQueriesContext(connection) as captured_queries:
         with connection.schema_editor(atomic=False) as editor:
             operation.database_backwards(
                 self.app_label, editor, new_state, project_state
             )
     self.assertEqual(len(captured_queries), 1)
     self.assertIn("DROP COLLATION", captured_queries[0]["sql"])
     # Deconstruction.
     name, args, kwargs = operation.deconstruct()
     self.assertEqual(name, "CreateCollation")
     self.assertEqual(args, [])
     self.assertEqual(
         kwargs,
         {
             "name": "case_insensitive_test",
             "locale": "und-u-ks-level2",
             "provider": "icu",
             "deterministic": False,
         },
     )