
import os

from django.test import TestCase

import oscar.apps


class TestMigrations(TestCase):

    def check_for_auth_model(self, filepath):
        with open(filepath) as f:
            s = f.read()
            return 'auth.User' in s or 'auth.user' in s

    def test_dont_contain_hardcoded_user_model(self):
        root_path = os.path.dirname(oscar.apps.__file__)
        matches = []
        for dir, __, migrations in os.walk(root_path):
            if dir.endswith('migrations'):
                paths = [os.path.join(dir, migration) for migration in migrations
                         if migration.endswith('.py')]
                matches += filter(self.check_for_auth_model, paths)

        if matches:
            pretty_matches = '\n'.join(
                [match.replace(root_path, '') for match in matches])
            self.fail('References to hardcoded User model found in the '
                      'following migration(s):\n' + pretty_matches)

import os
import re

from django.test import TestCase

import oscar.apps


class TestMigrations(TestCase):

    def setUp(self):
        self.root_path = os.path.dirname(oscar.apps.__file__)
        self.migration_filenames = []
        for path, __, migrations in os.walk(self.root_path):
            if path.endswith('migrations'):
                paths = [
                    os.path.join(path, migration) for migration in migrations
                    if migration.endswith('.py') and migration != '__init__.py']
                self.migration_filenames += paths

    def test_dont_contain_hardcoded_user_model(self):
        def check_for_auth_model(filepath):
            with open(filepath) as f:
                s = f.read()
                return 'auth.User' in s or 'auth.user' in s

        matches = filter(check_for_auth_model, self.migration_filenames)

        if matches:
            pretty_matches = '\n'.join(
                [match.replace(self.root_path, '') for match in matches])
            self.fail('References to hardcoded User model found in the '
                      'following migration(s):\n' + pretty_matches)

    def test_no_duplicate_migration_numbers(self):
        # pull app name and migration number
        regexp = re.compile(r'^.+oscar/apps/([\w/]+)/migrations/(\d{4}).+$')
        keys = []
        for migration in self.migration_filenames:
            match = regexp.match(migration)
            keys.append(match.group(1) + match.group(2))
        self.assertEqual(len(keys), len(set(keys)))

Add unit test for duplicate migration numbers
Add unit test for duplicate migration numbers

Duplicate migration numbers can happen when merging changes from
different branches. This test ensures that we address the issue right
away.

- 
  import os
+ import re
  
  from django.test import TestCase
  
  import oscar.apps
  
  
  class TestMigrations(TestCase):
  
-     def check_for_auth_model(self, filepath):
-         with open(filepath) as f:
-             s = f.read()
-             return 'auth.User' in s or 'auth.user' in s
+     def setUp(self):
+         self.root_path = os.path.dirname(oscar.apps.__file__)
+         self.migration_filenames = []
+         for path, __, migrations in os.walk(self.root_path):
+             if path.endswith('migrations'):
+                 paths = [
+                     os.path.join(path, migration) for migration in migrations
+                     if migration.endswith('.py') and migration != '__init__.py']
+                 self.migration_filenames += paths
  
      def test_dont_contain_hardcoded_user_model(self):
+         def check_for_auth_model(filepath):
+             with open(filepath) as f:
+                 s = f.read()
+                 return 'auth.User' in s or 'auth.user' in s
+ 
+         matches = filter(check_for_auth_model, self.migration_filenames)
-         root_path = os.path.dirname(oscar.apps.__file__)
-         matches = []
-         for dir, __, migrations in os.walk(root_path):
-             if dir.endswith('migrations'):
-                 paths = [os.path.join(dir, migration) for migration in migrations
-                          if migration.endswith('.py')]
-                 matches += filter(self.check_for_auth_model, paths)
  
          if matches:
              pretty_matches = '\n'.join(
-                 [match.replace(root_path, '') for match in matches])
+                 [match.replace(self.root_path, '') for match in matches])
              self.fail('References to hardcoded User model found in the '
                        'following migration(s):\n' + pretty_matches)
  
+     def test_no_duplicate_migration_numbers(self):
+         # pull app name and migration number
+         regexp = re.compile(r'^.+oscar/apps/([\w/]+)/migrations/(\d{4}).+$')
+         keys = []
+         for migration in self.migration_filenames:
+             match = regexp.match(migration)
+             keys.append(match.group(1) + match.group(2))
+         self.assertEqual(len(keys), len(set(keys)))
+ 
Add unit test for duplicate migration numbers
## Code Before:

import os

from django.test import TestCase

import oscar.apps


class TestMigrations(TestCase):

    def check_for_auth_model(self, filepath):
        with open(filepath) as f:
            s = f.read()
            return 'auth.User' in s or 'auth.user' in s

    def test_dont_contain_hardcoded_user_model(self):
        root_path = os.path.dirname(oscar.apps.__file__)
        matches = []
        for dir, __, migrations in os.walk(root_path):
            if dir.endswith('migrations'):
                paths = [os.path.join(dir, migration) for migration in migrations
                         if migration.endswith('.py')]
                matches += filter(self.check_for_auth_model, paths)

        if matches:
            pretty_matches = '\n'.join(
                [match.replace(root_path, '') for match in matches])
            self.fail('References to hardcoded User model found in the '
                      'following migration(s):\n' + pretty_matches)

## Instruction:
Add unit test for duplicate migration numbers
## Code After:
import os
import re

from django.test import TestCase

import oscar.apps


class TestMigrations(TestCase):

    def setUp(self):
        self.root_path = os.path.dirname(oscar.apps.__file__)
        self.migration_filenames = []
        for path, __, migrations in os.walk(self.root_path):
            if path.endswith('migrations'):
                paths = [
                    os.path.join(path, migration) for migration in migrations
                    if migration.endswith('.py') and migration != '__init__.py']
                self.migration_filenames += paths

    def test_dont_contain_hardcoded_user_model(self):
        def check_for_auth_model(filepath):
            with open(filepath) as f:
                s = f.read()
                return 'auth.User' in s or 'auth.user' in s

        matches = filter(check_for_auth_model, self.migration_filenames)

        if matches:
            pretty_matches = '\n'.join(
                [match.replace(self.root_path, '') for match in matches])
            self.fail('References to hardcoded User model found in the '
                      'following migration(s):\n' + pretty_matches)

    def test_no_duplicate_migration_numbers(self):
        # pull app name and migration number
        regexp = re.compile(r'^.+oscar/apps/([\w/]+)/migrations/(\d{4}).+$')
        keys = []
        for migration in self.migration_filenames:
            match = regexp.match(migration)
            keys.append(match.group(1) + match.group(2))
        self.assertEqual(len(keys), len(set(keys)))
