def test_change_var_name(self):
     for version_slug, version_tag in VERSION_TAGS.items():
         args = utils.HanforArgumentParser(app).parse_args(
             [VERSION_TAGS[version_slug], '-c', self.csv_files[version_slug]]
         )
         self.startup_hanfor(args, user_mock_answers=[])
         self.app.post(
             'api/var/update',
             data={
                 'name': 'foo_bar',
                 'name_old': 'foo',
                 'type': 'bool',
                 'const_val': '',
                 'const_val_old': '',
                 'type_old': 'unknown',
                 'occurrences': 'SysRS FooXY_42',
                 'constraints': json.dumps({}),
                 'updated_constraints': False,
                 'enumerators': json.dumps([])
             }
         )
         updated_affected_req = self.app.get('api/req/get?id=SysRS FooXY_42&row_idx=0')
         self.assertEqual(
             'Globally, it is never the case that "foo_bar!=bar" holds',
             updated_affected_req.json['formal'][0]
         )
Example #2
0
 def test_no_affect_of_deleting_used_variable(self):
     args = utils.HanforArgumentParser(app).parse_args(
         ['test_delete_variable'])
     self.startup_hanfor(args, user_mock_answers=[])
     # Get the available requirements.
     var_gets = self.app.get('api/var/gets')
     self.assertEqual(
         {
             'spam', 'spam_ham', 'foo', 'egg', 'spam_egg', 'spam', 'bar',
             'ham'
         }, {
             var[key]
             for var in var_gets.json['data']
             for key in var if key == 'name'
         })
     del_ham_result = self.app.post('api/var/multi_update',
                                    data={
                                        'change_type': '',
                                        'selected_vars':
                                        json.dumps(["foo"]),
                                        'del': 'true'
                                    })
     self.assertEqual(True, del_ham_result.json['success'])
     var_gets = self.app.get('api/var/gets')
     self.assertEqual(
         {
             'spam', 'spam_ham', 'foo', 'egg', 'spam_egg', 'spam', 'bar',
             'ham'
         }, {
             var[key]
             for var in var_gets.json['data']
             for key in var if key == 'name'
         })
 def test_adding_tags(self):
     for version_slug, version_tag in VERSION_TAGS.items():
         args = utils.HanforArgumentParser(app).parse_args(
             [VERSION_TAGS[version_slug], '-c', self.csv_files[version_slug]]
         )
         self.startup_hanfor(args, user_mock_answers=[])
         update = {
             "0":{
                 "id":"0",
                 "scope":"GLOBALLY",
                 "pattern":"Absence",
                 "expression_mapping":{"P":"","Q":"","R":"foo!= bar","S":"","T":"","U":""}
             }
         }
         add_formalization = self.app.post(
             'api/req/update',
             data={
                 'id': 'SysRS FooXY_42',
                 'row_idx': '0',
                 'update_formalization': 'false',
                 'tags': 'yolo',
                 'status': 'Todo',
                 'formalizations': json.dumps(update)
             }
         )
         self.assertEqual('200 OK', add_formalization.status)
         self.assertEqual('application/json', add_formalization.mimetype)
         updated_reqs = self.app.get('api/req/gets')
         self.assertEqual(
             ['yolo'],
             updated_reqs.json['data'][0]['tags'],
         )
Example #4
0
    def test_changed_description(self):
        """
        ### Status in old Revision:
        * No formalization

        ### Changes in CSV
        * Changed description of requirement.

        ### Desired state in New Revision:
        * No Formalization
        * Changed description to new one.
        * Add Tag: migrated_description
        * Change Status -> To do.
        """

        # Create the first initial revision.
        args = utils.HanforArgumentParser(app).parse_args(
            [TEST_TAGS['simple'], '-c', CSV_FILES['simple']])
        self.startup_hanfor(args, user_mock_answers=[2, 0, 1, 3])
        # Get the available requirements.
        initial_req_gets = self.app.get('api/req/gets')
        self.assertEqual(initial_req_gets.json['data'][1]['desc'],
                         'always look on the bright side of life')
        self.assertListEqual(initial_req_gets.json['data'][1]['tags'], [])

        # Create the second revision.
        args = utils.HanforArgumentParser(app).parse_args([
            TEST_TAGS['simple'], '--revision', '-c',
            CSV_FILES['simple_changed_desc']
        ])
        self.startup_hanfor(args, user_mock_answers=[0, 0])

        # Load the second revision.
        args = utils.HanforArgumentParser(app).parse_args(
            [TEST_TAGS['simple'], '-c', CSV_FILES['simple_changed_desc']])
        self.startup_hanfor(args, user_mock_answers=[1])
        # Get available requirements from new revision.
        new_revision_req_gets = self.app.get('api/req/gets')
        self.assertEqual(new_revision_req_gets.json['data'][1]['desc'],
                         'Mostly look on the bright side of life')
        self.assertListEqual(new_revision_req_gets.json['data'][1]['tags'], [
            'revision_0_to_revision_1_data_changed',
            'revision_0_to_revision_1_description_changed'
        ])
        self.assertListEqual(new_revision_req_gets.json['data'][0]['tags'], [])
 def test_csv_file_after_migrations(self):
     # Starting each version to trigger migrations.
     for version_slug, version_tag in VERSION_TAGS.items():
         args = utils.HanforArgumentParser(app).parse_args(
             [VERSION_TAGS[version_slug], '-c', self.csv_files[version_slug]]
         )
         self.startup_hanfor(args, user_mock_answers=[])
         # Test generated req_file consistency.
         csv_file_content = self.app.get('/api/tools/csv_file').data.decode('utf-8').replace('\r\n', '\n')
         self.assertEqual(self.expected_csv_files[version_slug], csv_file_content)
 def test_migrations(self):
     # Starting each version to trigger migrations.
     for version_slug, version_tag in VERSION_TAGS.items():
         args = utils.HanforArgumentParser(app).parse_args(
             [VERSION_TAGS[version_slug], '-c', self.csv_files[version_slug]]
         )
         self.startup_hanfor(args, user_mock_answers=[])
         # Get the available requirements.
         initial_req_gets = self.app.get('api/req/gets')
         self.assertEqual('always look on the bright side of life', initial_req_gets.json['data'][1]['desc'])
         self.assertListEqual(['unseen'], initial_req_gets.json['data'][1]['tags'])
Example #7
0
    def test_new_session_from_csv(self):
        """
        Creates a new session.
        """

        # Create the first initial revision.
        args = utils.HanforArgumentParser(app).parse_args([TEST_TAGS['simple'], '-c', CSV_FILES['simple']])
        self.startup_hanfor(args, user_mock_answers=[2, 0, 1, 3])
        # Get the available requirements.
        initial_req_gets = self.app.get('api/req/gets')
        self.assertEqual(initial_req_gets.json['data'][1]['desc'], 'always look on the bright side of life')
        self.assertListEqual(initial_req_gets.json['data'][1]['tags'], [])
Example #8
0
    def startup_hanfor(self, csv_file, session_tag, user_mock_answers):
        global mock_results
        global count
        count = -1

        csv_file = os.path.join(self.test_session_base_folder, session_tag,
                                csv_file)
        args = utils.HanforArgumentParser(app).parse_args(
            [session_tag, '-c', csv_file])
        mock_results = user_mock_answers

        startup_hanfor(args, self.here)
        app.config['TEMPLATES_FOLDER'] = os.path.join(self.here, '..',
                                                      'templates')
Example #9
0
    def test_created_diff(self):
        """
        """
        # Create the first initial revision.
        args = utils.HanforArgumentParser(app).parse_args(
            [TEST_TAGS['real'], '-c', CSV_FILES['test_real_rev_0']])
        self.startup_hanfor(args, user_mock_answers=[1, 5, 27, 8, 0])
        # Get the available requirements.
        initial_req_gets = self.app.get('api/req/gets')
        self.assertEqual('DySok ASPDOJ_123',
                         initial_req_gets.json['data'][0]['id'])
        self.assertListEqual([], initial_req_gets.json['data'][0]['tags'])

        # Create the second revision.
        args = utils.HanforArgumentParser(app).parse_args([
            TEST_TAGS['real'], '--revision', '-c', CSV_FILES['test_real_rev_1']
        ])
        self.startup_hanfor(args, user_mock_answers=[0, 0])

        # Load the second revision.
        args = utils.HanforArgumentParser(app).parse_args(
            [TEST_TAGS['real'], '-c', CSV_FILES['test_real_rev_1']])
        self.startup_hanfor(args, user_mock_answers=[1])
        # Get available requirements from new revision.
        new_revision_req_gets = self.app.get('api/req/gets')
        # Do tests
        self.assertListEqual(
            ['FWEPOFKWPFOK'],
            list(
                new_revision_req_gets.json['data'][0]['revision_diff'].keys()),
            'Only a diff with changes at key FWEPOFKWPFOK')
        self.assertEqual(
            '- 1.2.3\n?     ^\n\n+ 1.2.4\n?     ^\n',
            new_revision_req_gets.json['data'][0]['revision_diff']
            ['FWEPOFKWPFOK'])
        self.assertListEqual(['revision_0_to_revision_1_data_changed'],
                             new_revision_req_gets.json['data'][0]['tags'])
Example #10
0
 def test_variable_with_constraint_deletion(self):
     args = utils.HanforArgumentParser(app).parse_args(
         ['test_delete_variable'])
     self.startup_hanfor(args, user_mock_answers=[])
     # Get the available requirements.
     var_gets = self.app.get('api/var/gets')
     self.assertIn(
         {
             'name':
             'ham',
             'constraints':
             ['Globally, it is never the case that "ham != foo" holds'],
             'type_inference_errors': {},
             'script_results':
             '',
             'used_by': ['Constraint_ham_0'],
             'const_val':
             None,
             'tags': [],
             'type':
             'bool',
             'belongs_to_enum':
             ''
         }, var_gets.json['data'])
     self.assertEqual(
         {
             'spam', 'spam_ham', 'foo', 'egg', 'spam_egg', 'spam', 'bar',
             'ham'
         }, {
             var[key]
             for var in var_gets.json['data']
             for key in var if key == 'name'
         })
     del_ham_result = self.app.post('api/var/multi_update',
                                    data={
                                        'change_type': '',
                                        'selected_vars':
                                        json.dumps(["ham"]),
                                        'del': 'true'
                                    })
     self.assertEqual(True, del_ham_result.json['success'])
     var_gets = self.app.get('api/var/gets')
     self.assertEqual(
         {'spam', 'spam_ham', 'foo', 'egg', 'spam_egg', 'spam', 'bar'}, {
             var[key]
             for var in var_gets.json['data']
             for key in var if key == 'name'
         })
Example #11
0
    def test_1_init_from_csv(self):
        args = utils.HanforArgumentParser(app).parse_args(
            [TEST_TAG, '-c', TEST_CSV])
        self.startup_hanfor(args, [2, 0, 1, 3, 0])
        self.assertTrue(os.path.isdir(os.path.join(TESTS_BASE_FOLDER,
                                                   TEST_TAG)),
                        msg='No session folder created.')
        self.assertTrue(os.path.isdir(
            os.path.join(TESTS_BASE_FOLDER, TEST_TAG, 'revision_0')),
                        msg='No revision folder created.')

        # Check contents.
        for file in [
                'SysRS FooXY_42.pickle', 'SysRS FooXY_91.pickle',
                'session_status.pickle'
        ]:
            self.assertTrue(os.path.exists(
                os.path.join(TESTS_BASE_FOLDER, TEST_TAG, 'revision_0', file)),
                            msg='Missing file: {}'.format(file))
 def test_removing_formalization(self):
     for version_slug, version_tag in VERSION_TAGS.items():
         args = utils.HanforArgumentParser(app).parse_args(
             [VERSION_TAGS[version_slug], '-c', self.csv_files[version_slug]]
         )
         self.startup_hanfor(args, user_mock_answers=[])
         reqs = self.app.get('api/req/gets')
         self.assertEqual('Globally, it is never the case that "foo != bar" holds', reqs.json['data'][0]['formal'][0])
         add_formalization = self.app.post(
             'api/req/del_formalization',
             data={
                 'requirement_id': 'SysRS FooXY_42',
                 'formalization_id':	0,
             }
         )
         self.assertEqual('200 OK', add_formalization.status)
         self.assertEqual('application/json', add_formalization.mimetype)
         reqs = self.app.get('api/req/gets')
         self.assertEqual([], reqs.json['data'][0]['formal'])
Example #13
0
 def test_simple_script(self):
     # Starting each version to trigger migrations.
     for version_slug, version_tag in VERSION_TAGS.items():
         args = utils.HanforArgumentParser(app).parse_args([
             VERSION_TAGS[version_slug], '-c', self.csv_files[version_slug]
         ])
         for test_name, settings in SCRIPT_EVALUATIONS[version_slug].items(
         ):
             app.config['SCRIPT_EVALUATIONS'] = settings['script_config']
             self.startup_hanfor(args, user_mock_answers=[])
             # Let the background task do its work.
             time.sleep(0.5)
             # Get the available requirements.
             var_gets = self.app.get('api/var/gets')
             self.assertEqual(5, len(var_gets.json['data']))
             for result in var_gets.json['data']:
                 self.assertEqual(
                     settings['expected_result'].replace(
                         '$VAR_NAME', result['name']),
                     result['script_results'])
Example #14
0
    def test_2_get_requirements(self):
        args = utils.HanforArgumentParser(app).parse_args(
            [TEST_TAG, '-c', TEST_CSV])
        self.startup_hanfor(args, [2, 0, 1, 3, 0])
        result = self.app.get('api/req/gets')
        self.maxDiff = None
        desired_reqs = [{
            'formal': [],
            'pattern': 'None',
            'status': 'Todo',
            'pos': 1,
            'revision_diff': {},
            'vars': [],
            'scope': 'None',
            'tags': [],
            'desc': 'Dont worry, be happy',
            'csv_data': {
                'formal_header':
                'Globally, it is never the case, that WORRY holds; Globally, it is always the case, that HAPPY holds.',
                'id_header': 'SysRS FooXY_42',
                'type_header': 'req',
                'desc_header': 'Dont worry, be happy'
            },
            'id': 'SysRS FooXY_42',
            'type_inference_errors': {},
            'type': 'req'
        }, {
            'formal': [],
            'status': 'Todo',
            'pattern': 'None',
            'pos': 0,
            'revision_diff': {},
            'vars': [],
            'scope': 'None',
            'tags': [],
            'desc': 'always look on the bright side of life',
            'csv_data': {
                'formal_header':
                'Globally, it is always the case that POINT_OF_VIEW==BRIGHT_SIDE_OF_LIVE',
                'id_header': 'SysRS FooXY_91',
                'type_header': 'req',
                'desc_header': 'always look on the bright side of life'
            },
            'id': 'SysRS FooXY_91',
            'type_inference_errors': {},
            'type': 'req'
        }]
        self.assertListEqual(result.json['data'], desired_reqs)

        result = self.app.get('api/req/get?id=SysRS FooXY_42')
        desired_req = {
            'id': 'SysRS FooXY_42',
            'type_inference_errors': {},
            'csv_data': {
                'type_header':
                'req',
                'id_header':
                'SysRS FooXY_42',
                'desc_header':
                'Dont worry, be happy',
                'formal_header':
                'Globally, it is never the case, that WORRY holds; Globally, it is always the case, that HAPPY holds.'
            },
            'status': 'Todo',
            'available_vars': [],
            'additional_static_available_vars': ['abs()'],
            'desc': 'Dont worry, be happy',
            'formal': [],
            'vars': [],
            'tags': [],
            'pattern': 'None',
            'pos': 1,
            'scope': 'None',
            'type': 'req',
            'formalizations_html': '',
            'revision_diff': {}
        }
        self.assertDictEqual(result.json, desired_req)
    def test_generating_a_new_import_session(self):
        for version_slug, version_tag in VERSION_TAGS.items():
            # Cleanup test_env in each iteration to be consistent.
            self.clean_folders()
            self.create_temp_data()
            args = utils.HanforArgumentParser(app).parse_args(
                [VERSION_TAGS[version_slug], '-c', self.csv_files[version_slug]]
            )
            self.startup_hanfor(args, user_mock_answers=[])
            # Test correct variable import session infos
            import_session_details = self.app.post(
                'api/var/var_import_info',
                data={
                    'sess_name': 'simple_0_0_0_var_import_source',
                    'sess_revision': 'revision_0'
                }
            )
            self.assertEqual(
                {"new_vars": 6, "tot_vars": 11},
                import_session_details.json
            )
            # Start a new import session.
            start_import_session_result = self.app.post(
                'api/var/start_import_session',
                data={
                    'sess_name': 'simple_0_0_0_var_import_source',
                    'sess_revision': 'revision_0'
                }
            )
            self.assertEqual(
                {
                    "errormsg": "",
                    "session_id": 0,
                    "success": True
                },
                start_import_session_result.json
            )
            # Check import session consistency.
            import_session_data = self.app.post(
                'variable_import/api/0/get_table_data',
                data={
                    'sess_name': 'simple_0_0_0_var_import_source',
                    'sess_revision': 'revision_0'
                }
            )

            self.assertEqual(
                11,
                len(import_session_data.json['data'])
            )
            # Mark variables to be imported.
            self.app.post(
                'variable_import/api/0/store_table',
                data={'rows': json.dumps({"enum_with_constraint":{"action":"source"}})}
            )
            # Mark variables to be imported.
            self.app.post('variable_import/api/0/apply_import', data={})
            # Check consistency of for imported variables.
            new_var_collection_contents = self.app.get('api/var/gets')
            self.assertIn(
                {
                    'used_by': ['Constraint_enum_with_constraint_0'],
                    'type_inference_errors': {},
                    'constraints': [
                        'Globally, it is never the case that "0 < enum_with_constraint && enum_with_constraint  < 3" holds'
                    ],
                    'const_val': None,
                    'tags': [],
                    'type': 'ENUM_INT',
                    'name': 'enum_with_constraint',
                    'script_results': '',
                    'belongs_to_enum': ''
                },
                new_var_collection_contents.json['data']
            )
Example #16
0
 def test_variable_add_constraint_and_change_type_at_the_same_time(self):
     args = utils.HanforArgumentParser(app).parse_args(
         ['test_variable_manipulation_edge_cases']
     )
     self.startup_hanfor(args, user_mock_answers=[])
     # Get the available requirements.
     var_gets = self.app.get('api/var/gets')
     self.assertIn(
         {
             'name': 'egg',
             'constraints': [],
             'type_inference_errors': {},
             'script_results': '',
             'used_by': ['SysRS FooXY_91'],
             'const_val': None,
             'tags': [],
             'type': 'bool',
             'belongs_to_enum': ''
         },
         var_gets.json['data']
     )
     add_constraint = self.app.post(
         'api/var/new_constraint',
         data={'name': 'egg'}
     )
     self.assertEqual(True, add_constraint.json['success'])
     change_type = self.app.post(
         'api/var/update',
         data={
             'name': 'egg',
             'name_old': 'egg',
             'type': 'ENUM_INT',
             'const_val': '',
             'const_val_old': '',
             'type_old': 'bool',
             'occurrences': 'SysRS+FooXY_91',
             'constraints': json.dumps(
                 {
                     "0":{
                         "id":"0",
                         "scope":"GLOBALLY",
                         "pattern":"Universality",
                         "expression_mapping":{"P":"","Q":"","R":"egg > 10","S":"","T":"","U":""}
                     }
                 }),
             'updated_constraints': 'true',
             'enumerators': json.dumps([])
         }
     )
     self.assertEqual(True, change_type.json['success'])
     var_gets = self.app.get('api/var/gets')
     print(var_gets.json['data'])
     self.assertIn(
         {
             'name': 'egg',
             'constraints': ['Globally, it is always the case that "egg > 10" holds'],
             'used_by': ['Constraint_egg_0', 'SysRS FooXY_91'],
             'tags': [],
             'type_inference_errors': {},
             'const_val': None,
             'type': 'ENUM_INT',
             'script_results': '',
             'belongs_to_enum': ''
         },
         var_gets.json['data']
     )