diff --git a/django_migration_linter/cache.py b/django_migration_linter/cache.py index 46e3a63..ca03b2d 100644 --- a/django_migration_linter/cache.py +++ b/django_migration_linter/cache.py @@ -41,6 +41,7 @@ class Cache(dict): pass def save(self): + print(self) f = open(self.filename, 'wb') pickle.dump(self, f, 2) f.close() diff --git a/django_migration_linter/migration_linter.py b/django_migration_linter/migration_linter.py index a04f5a2..1614f8a 100644 --- a/django_migration_linter/migration_linter.py +++ b/django_migration_linter/migration_linter.py @@ -103,6 +103,7 @@ class MigrationLinter(object): if analysis_result['ignored']: print('IGNORE') + self.new_cache[md5hash] = {'result': 'IGNORE'} self.nb_ignored += 1 return diff --git a/tests/functional/test_cache.py b/tests/functional/test_cache.py index 4ea631f..7c68ed4 100644 --- a/tests/functional/test_cache.py +++ b/tests/functional/test_cache.py @@ -28,7 +28,6 @@ else: import mock - class CacheTest(unittest.TestCase): MIGRATION_FILE = os.path.join(fixtures.ALTER_COLUMN_PROJECT, 'test_app', 'migrations', '0001_initial.py') fd, temp_path = tempfile.mkstemp() @@ -73,7 +72,30 @@ class CacheTest(unittest.TestCase): self.assertTrue(linter.has_errors) def test_cache_ignored(self): - pass + cache_file = os.path.join(DEFAULT_CACHE_PATH, 'test_project_ignore_migration.pickle') + if os.path.exists(cache_file): + os.remove(cache_file) + linter = MigrationLinter(fixtures.IGNORE_MIGRATION_PROJECT) + + with mock.patch.object(MigrationLinter, 'get_sql', wraps=linter.get_sql)as sql_mock: + linter.lint_all_migrations() + sql_mock.assert_called() + + cache = Cache( + fixtures.IGNORE_MIGRATION_PROJECT, + DEFAULT_CACHE_PATH + ) + cache.load() + + self.assertEqual(cache['63230606af0eccaef7f1f78c537c624c']['result'], 'OK') + self.assertEqual(cache['5c5ca1780a9f28439c1defc1f32af894']['result'], 'IGNORE') + + # Start the Linter again -> should use cache now. + linter = MigrationLinter(fixtures.IGNORE_MIGRATION_PROJECT) + + with mock.patch.object(MigrationLinter, 'get_sql', wraps=linter.get_sql)as sql_mock: + linter.lint_all_migrations() + sql_mock.assert_not_called() def test_cache_modified(self): cache_file = os.path.join(DEFAULT_CACHE_PATH, 'test_project_alter_column.pickle') diff --git a/tests/functional/test_cmd_line_call.py b/tests/functional/test_cmd_line_call.py index 8518a9e..d15a9cd 100644 --- a/tests/functional/test_cmd_line_call.py +++ b/tests/functional/test_cmd_line_call.py @@ -67,7 +67,7 @@ class CallLinterFromCommandLineTest(unittest.TestCase): fixtures.CORRECT_PROJECT) process = Popen( - cmd, shell=True, stdout=PIPE, stderr=sys.stderr) + cmd, shell=True, stdout=PIPE, stderr=PIPE) process.wait() self.assertEqual(process.returncode, 0) lines = list(map(utils.clean_bytes_to_str, process.stdout.readlines()))