Пример #1
0
    def test_status_no_table_all(self):
        self.setup_test('master')
        database_1 = self.create_database('master', False)
        self.setup_test('system')
        database_2 = self.create_database('system', False)
        self.setup_test('course')
        database_3 = self.create_database('course', False)
        self.args.environments = ['system', 'course', 'master']
        self.args.choose_course = None
        self.args.config = SimpleNamespace()
        self.args.config.database = dict()
        self.args.config.submitty = dict()
        self.args.config.submitty['submitty_data_dir'] = Path(self.dir)
        Path(self.dir, 'courses', 'f19', 'csci1100').mkdir(parents=True)

        with patch.object(migrator.db, 'Database') as mock_class:
            mock_class.side_effect = [database_1, database_2, database_3]
            main.status(self.args)
        expected = """Could not find migration table for master
Could not find migration table for system
Could not find migration table for f19.csci1100
"""
        self.assertEqual(expected, sys.stdout.getvalue())
        self.assertFalse(database_1.open)
        self.assertFalse(database_2.open)
        self.assertFalse(database_3.open)
Пример #2
0
    def test_status_course(self, mock_method):
        self.setup_test('course')
        database = self.create_database('course')
        self.args.environments = ['course']
        self.args.choose_course = None
        self.args.config = SimpleNamespace()
        self.args.config.database = dict()
        self.args.config.submitty = dict()
        self.args.config.submitty['submitty_data_dir'] = Path(self.dir)
        Path(self.dir, 'courses', 'f19', 'csci1100').mkdir(parents=True)

        with patch.object(migrator.db, 'Database') as mock_class:
            mock_class.side_effect = [database]
            main.status(self.args)
        self.assertTrue(mock_class.called)
        self.assertEqual(1, mock_class.call_count)
        self.assertTrue(({
            'dbname': 'submitty_f19_csci1100'
        }, 'course'), mock_class.call_args[0])
        self.assertTrue(mock_method.called)
        self.assertEqual(database, mock_method.call_args[0][0])
        self.assertEqual('course', mock_method.call_args[0][1])
        # Test that mutation did not happen
        self.assertEqual(self.args.config.database, dict())
        self.assertNotIn('semester', self.args)
        self.assertNotIn('course', self.args)
        self.args.config.database = {'dbname': 'submitty_f19_csci1100'}
        self.args.semester = 'f19'
        self.args.course = 'csci1100'
        self.assertEqual(self.args, mock_method.call_args[0][2])
        self.assertEqual(self.args.semester, 'f19')
        self.assertEqual(self.args.course, 'csci1100')
        self.assertFalse(database.open)
Пример #3
0
 def test_no_course_dir(self):
     self.args.environments = ['course']
     self.args.config = SimpleNamespace()
     self.args.config.database = dict()
     self.args.config.submitty = {'submitty_data_dir': self.dir}
     main.status(self.args)
     self.assertEqual(
         "Could not find courses directory: {}\n".format(
             str(Path(self.dir, 'courses'))), sys.stdout.getvalue())
Пример #4
0
    def test_status_no_db_system(self):
        self.args.environments = ['system']
        self.args.config = SimpleNamespace()
        self.args.config.database = dict()

        with patch.object(migrator.db, 'Database') as mock_class:
            mock_class.side_effect = OperationalError('test', None, None)
            main.status(self.args)
        self.assertEqual("Could not get database for migrations for system\n",
                         sys.stdout.getvalue())
Пример #5
0
    def test_status_no_table_master(self):
        self.setup_test('master', False)
        self.args.environments = ['master']
        self.args.config = SimpleNamespace()
        self.args.config.database = dict()

        with patch.object(migrator.db, 'Database') as mock_class:
            mock_class.side_effect = [self.databases['master']]
            main.status(self.args)
        self.assertEqual("Could not find migration table for master\n",
                         sys.stdout.getvalue())
        self.assertFalse(self.databases['master'].open)
Пример #6
0
    def test_status_no_table_system(self):
        self.setup_test('system')
        database = self.create_database('system', False)
        self.args.environments = ['system']
        self.args.config = SimpleNamespace()
        self.args.config.database = dict()

        with patch.object(migrator.db, 'Database') as mock_class:
            mock_class.side_effect = [database]
            main.status(self.args)
        self.assertTrue(mock_class.called)
        self.assertEqual("Could not find migration table for system\n",
                         sys.stdout.getvalue())
        self.assertFalse(database.open)
Пример #7
0
    def test_status_no_db_course(self):
        self.args.environments = ['course']
        self.args.choose_course = None
        self.args.config = SimpleNamespace()
        self.args.config.database = dict()
        self.args.config.submitty = dict()
        self.args.config.submitty['submitty_data_dir'] = Path(self.dir)
        Path(self.dir, 'courses', 'f19', 'csci1100').mkdir(parents=True)

        with patch.object(migrator.db, 'Database') as mock_class:
            mock_class.side_effect = OperationalError('test', None, None)
            main.status(self.args)
        self.assertEqual(
            "Could not get the status for the migrations for f19.csci1100\n",
            sys.stdout.getvalue())
Пример #8
0
    def test_status_system(self, mock_method):
        self.setup_test('system')
        self.args.environments = ['system']
        self.args.config = SimpleNamespace()
        self.args.config.database = dict()

        with patch.object(migrator.db, 'Database') as mock_class:
            mock_class.side_effect = [self.databases['system']]
            main.status(self.args)
        self.assertTrue(mock_class.called)
        self.assertTrue(mock_method.called)
        self.assertEqual(self.databases['system'], mock_method.call_args[0][0])
        self.assertEqual('system', mock_method.call_args[0][1])
        self.assertEqual(self.args, mock_method.call_args[0][2])
        self.assertFalse(self.databases['system'].open)
Пример #9
0
    def test_status_no_table_course(self):
        self.setup_test('course', False)
        self.args.environments = ['course']
        self.args.choose_course = None
        self.args.config = SimpleNamespace()
        self.args.config.database = dict()
        self.args.config.submitty = dict()
        self.args.config.submitty['submitty_data_dir'] = Path(self.dir)
        Path(self.dir, 'courses', 'f19', 'csci1100').mkdir(parents=True)

        with patch.object(migrator.db, 'Database') as mock_class:
            mock_class.side_effect = [self.databases['course']]
            main.status(self.args)
        self.assertTrue(mock_class.called)
        self.assertEqual("Could not find migration table for f19.csci1100\n",
                         sys.stdout.getvalue())
        self.assertFalse(self.databases['course'].open)
Пример #10
0
    def test_status_master(self, mock_method):
        self.setup_test('master')
        database = self.create_database('master')
        self.args.environments = ['master']
        self.args.config = SimpleNamespace()
        self.args.config.database = dict()

        with patch.object(migrator.db, 'Database') as mock_class:
            mock_class.side_effect = [database]
            main.status(self.args)
        self.assertTrue(mock_class.called)
        self.assertTrue(mock_method.called)
        self.assertEqual(database, mock_method.call_args[0][0])
        self.assertEqual('master', mock_method.call_args[0][1])
        # Test that mutation did not happen
        self.assertEqual(self.args.config.database, dict())
        self.args.config.database = {'dbname': 'submitty'}
        self.assertEqual(self.args, mock_method.call_args[0][2])
        self.assertFalse(database.open)
Пример #11
0
    def test_status_no_db_all(self):
        self.args.environments = ['course', 'master', 'system']
        self.args.choose_course = None
        self.args.config = SimpleNamespace()
        self.args.config.database = dict()
        self.args.config.submitty = dict()
        self.args.config.submitty['submitty_data_dir'] = Path(self.dir)
        Path(self.dir, 'courses', 'f19', 'csci1100').mkdir(parents=True)

        with patch.object(migrator.db, 'Database') as mock_class:
            mock_class.side_effect = OperationalError('test', None,
                                                      "No Database")
            main.status(self.args)
        expected = """Could not get database for migrations for master:
  (builtins.str) No Database
Could not get database for migrations for system:
  (builtins.str) No Database
Could not get the status for the migrations for f19.csci1100
"""
        self.assertEqual(expected, sys.stdout.getvalue())
Пример #12
0
    def test_status_course(self, mock_method):
        self.setup_test('course')
        self.args.environments = ['course']
        self.args.choose_course = None
        self.args.config = SimpleNamespace()
        self.args.config.database = dict()
        self.args.config.submitty = dict()
        self.args.config.submitty['submitty_data_dir'] = Path(self.dir)
        Path(self.dir, 'courses', 'f19', 'csci1100').mkdir(parents=True)

        with patch.object(migrator.db, 'Database') as mock_class:
            mock_class.side_effect = [self.databases['course']]
            main.status(self.args)
        self.assertTrue(mock_class.called)
        self.assertTrue(mock_method.called)
        self.assertEqual(self.databases['course'], mock_method.call_args[0][0])
        self.assertEqual('course', mock_method.call_args[0][1])
        self.assertEqual(self.args, mock_method.call_args[0][2])
        self.assertEqual(self.args.semester, 'f19')
        self.assertEqual(self.args.course, 'csci1100')
        self.assertFalse(self.databases['course'].open)
Пример #13
0
    def test_status_multiple_course(self, mock_method):
        self.setup_test('course')
        database_1 = self.create_database('course')
        database_2 = self.create_database('coures')
        database_3 = self.create_database('course')
        self.args.environments = ['course']
        self.args.choose_course = None
        self.args.config = SimpleNamespace()
        self.args.config.database = dict()
        self.args.config.submitty = dict()
        self.args.config.submitty['submitty_data_dir'] = Path(self.dir)
        Path(self.dir, 'courses', 'f18', 'csci1100').mkdir(parents=True)
        Path(self.dir, 'courses', 'f19', 'csci1100').mkdir(parents=True)
        Path(self.dir, 'courses', 'f19', 'csci1200').mkdir(parents=True)

        with patch.object(migrator.db, 'Database') as mock_class:
            mock_class.side_effect = [database_1, database_2, database_3]
            main.status(self.args)
        self.assertTrue(mock_class.called)
        self.assertEqual(3, mock_class.call_count)
        self.assertTrue(({
            'dbname': 'submitty_f18_csci1100'
        }, 'course'), mock_class.call_args_list[0][0])
        self.assertTrue(({
            'dbname': 'submitty_f19_csci1100'
        }, 'course'), mock_class.call_args_list[1][0])
        self.assertTrue(({
            'dbname': 'submitty_f19_csci1200'
        }, 'course'), mock_class.call_args_list[2][0])
        self.assertTrue(mock_method.called)
        self.assertEqual(3, mock_method.call_count)

        mock_args = mock_method.call_args_list[0][0]
        expected_args = deepcopy(self.args)
        self.assertEqual(database_1, mock_args[0])
        self.assertEqual('course', mock_args[1])
        # Test that mutation did not happen
        self.assertEqual(expected_args.config.database, dict())
        self.assertNotIn('semester', expected_args)
        self.assertNotIn('course', expected_args)
        expected_args.config.database = {'dbname': 'submitty_f18_csci1100'}
        expected_args.semester = 'f18'
        expected_args.course = 'csci1100'
        self.assertEqual(expected_args, mock_args[2])
        self.assertEqual(expected_args.semester, 'f18')
        self.assertEqual(expected_args.course, 'csci1100')
        self.assertFalse(database_1.open)

        mock_args = mock_method.call_args_list[1][0]
        expected_args = deepcopy(self.args)
        self.assertEqual(database_2, mock_args[0])
        self.assertEqual('course', mock_args[1])
        # Test that mutation did not happen
        self.assertEqual(expected_args.config.database, dict())
        self.assertNotIn('semester', expected_args)
        self.assertNotIn('course', expected_args)
        expected_args.config.database = {'dbname': 'submitty_f19_csci1100'}
        expected_args.semester = 'f19'
        expected_args.course = 'csci1100'
        self.assertEqual(expected_args, mock_args[2])
        self.assertEqual(expected_args.semester, 'f19')
        self.assertEqual(expected_args.course, 'csci1100')
        self.assertFalse(database_2.open)

        mock_args = mock_method.call_args_list[2][0]
        expected_args = deepcopy(self.args)
        self.assertEqual(database_3, mock_args[0])
        self.assertEqual('course', mock_args[1])
        # Test that mutation did not happen
        self.assertEqual(expected_args.config.database, dict())
        self.assertNotIn('semester', expected_args)
        self.assertNotIn('course', expected_args)
        expected_args.config.database = {'dbname': 'submitty_f19_csci1200'}
        expected_args.semester = 'f19'
        expected_args.course = 'csci1200'
        self.assertEqual(expected_args, mock_args[2])
        self.assertEqual(expected_args.semester, 'f19')
        self.assertEqual(expected_args.course, 'csci1200')
        self.assertFalse(database_3.open)