Exemplo n.º 1
0
        def test_saving_journeys_thats_still_in_edit_mode(self):
            sample_journey = {
                "initial_screen": {
                    "type": "initial_screen",
                    "next_screen": "end_screen",
                    "default_language": "en"
                },
                "end_screen": {
                    "type": "quit_screen",
                    "text": "end screen"
                }
            }

            self.driver.save(name="journey_a",
                             journey=sample_journey,
                             version="0.0.1")

            self.assertEqual(sample_journey,
                             self.driver.get('journey_a', '0.0.1'))

            sample_journey_edit_mode = {
                "initial_screen": {
                    "type": "initial_screen",
                    "next_screen": "end_screen",
                    "default_language": "en"
                },
            }

            # confirm its invalid
            is_valid, errors = UssdView.validate_ussd_journey(
                sample_journey_edit_mode)
            self.assertFalse(is_valid)

            # but we can still save it under edit mode
            self.driver.save(name='journey_a',
                             journey=sample_journey_edit_mode,
                             edit_mode=True)

            # stills get the valid one that was saved.
            self.assertEqual(sample_journey, self.driver.get('journey_a'))

            # getting the one use edit mode
            self.assertEqual(sample_journey_edit_mode,
                             self.driver.get('journey_a', edit_mode=True))

            sample_journey_edit_mode['invalid_screen'] = "invalid_screen"

            # and we can still save it again
            self.driver.save(name='journey_a',
                             journey=sample_journey_edit_mode,
                             edit_mode=True)
            self.assertEqual(sample_journey_edit_mode,
                             self.driver.get('journey_a', edit_mode=True))
Exemplo n.º 2
0
    def post(self, req):
        journey = req.data['journey']

        if isinstance(journey, str):
            journey = json.loads(journey)

        error_type = req.data.get('error_type', 'default')

        is_valid, errors = UssdView.validate_ussd_journey(journey)

        if error_type == 'mermaid_txt':
            errors = convert_error_response_to_mermaid_error(errors)
        return JsonResponse(errors, safe=False)
Exemplo n.º 3
0
    def post(self, req):
        journey = req.data['journey']

        if isinstance(journey, str):
            journey = json.loads(journey)

        error_type = req.data.get('error_type', 'default')

        is_valid, errors = UssdView.validate_ussd_journey(journey)


        if error_type == 'mermaid_txt':
            errors = convert_error_response_to_mermaid_error(errors)
        return JsonResponse(errors, safe=False)
Exemplo n.º 4
0
def validate_yaml(value):
    try:
        journey = read_journey(value['journeys'])
        is_valid, errors = UssdView.validate_ussd_journey(journey)

        # validate the existance and form of a custom defined initialize_survey screen
        # if is_valid:
        #     is_valid, errors = validate_ussd_journey(journey)
    except Exception as ex:
        logger.error(ex)
        raise serializers.ValidationError(
            {"journeys": ["The yaml file is invalid."]})

    if not is_valid:
        raise serializers.ValidationError({"journeys": [json.dumps(errors)]})
Exemplo n.º 5
0
        def _test_ussd_validation(self, yaml_to_validate, expected_validation,
                                  expected_errors):

            if self.validate_ussd:
                namespace = self.namespace + str(expected_validation)
                file_path = path + '/' + yaml_to_validate
                load_yaml(file_path, namespace)
                ussd_screens = staticconf.config. \
                    get_namespace(namespace). \
                    get_config_values()

                is_valid, error_message = UssdView.validate_ussd_journey(
                    ussd_screens)

                self.assertEqual(is_valid, expected_validation, error_message)

                self.assertDictEqual(error_message, expected_errors)
Exemplo n.º 6
0
        def test_saving_journeys_thats_still_in_edit_mode(self):
            sample_journey = {
                "initial_screen": {
                    "type": "initial_screen",
                    "next_screen": "end_screen",
                    "default_language": "en"
                },
                "end_screen": {
                    "type": "quit_screen",
                    "text": "end screen"
                }
            }

            self.driver.save(name="journey_a", journey=sample_journey, version="0.0.1")

            self.assertEqual(sample_journey, self.driver.get('journey_a', '0.0.1'))

            sample_journey_edit_mode = {
                "initial_screen": {
                    "type": "initial_screen",
                    "next_screen": "end_screen",
                    "default_language": "en"
                },
            }

            # confirm its invalid
            is_valid, errors = UssdView.validate_ussd_journey(sample_journey_edit_mode)
            self.assertFalse(is_valid)

            # but we can still save it under edit mode
            self.driver.save(name='journey_a', journey=sample_journey_edit_mode, edit_mode=True)

            # stills get the valid one that was saved.
            self.assertEqual(sample_journey, self.driver.get('journey_a'))

            # getting the one use edit mode
            self.assertEqual(sample_journey_edit_mode, self.driver.get('journey_a', edit_mode=True))

            sample_journey_edit_mode['invalid_screen'] = "invalid_screen"

            # and we can still save it again
            self.driver.save(name='journey_a', journey=sample_journey_edit_mode, edit_mode=True)
            self.assertEqual(sample_journey_edit_mode, self.driver.get('journey_a', edit_mode=True))
Exemplo n.º 7
0
        def _test_ussd_validation(self, yaml_to_validate, expected_validation,
                                  expected_errors):

            if self.validate_ussd:
                namespace = self.namespace + str(expected_validation)
                staticconf.YamlConfiguration(path + '/' + yaml_to_validate,
                                             namespace=namespace,
                                             flatten=False)

                ussd_screens = staticconf.config. \
                    get_namespace(namespace). \
                    get_config_values()

                is_valid, error_message = UssdView.validate_ussd_journey(
                    ussd_screens)

                self.assertEqual(is_valid, expected_validation, error_message)

                self.assertDictEqual(error_message, expected_errors)
Exemplo n.º 8
0
    def handle(self, *args, **options):
        error_message = {}
        for ussd_config in options["ussd_configs"]:
            if not os.path.isfile(ussd_config):
                raise CommandError(
                    "The file path {} does not exist".format(ussd_config))
            namespace = 'validation'
            load_yaml(ussd_config, namespace)

            ussd_screens = staticconf.config. \
                get_namespace(namespace). \
                get_config_values()

            is_valid, error_ussd_config_message = UssdView.validate_ussd_journey(
                ussd_screens)
            error_message[ussd_config] = dict(
                valid=is_valid, error_message=error_ussd_config_message)
            if not is_valid:
                raise CommandError(json.dumps(error_message))

        self.stdout.write(json.dumps(error_message))
Exemplo n.º 9
0
    def save(self, name: str, journey: dict, version=None, edit_mode=False):

        # version and editor mode should not be false
        if not (version or edit_mode):
            raise TypeError("version is required if its not in editor mode")

        if edit_mode:
            version = self.edit_mode_version

        # check if this version already exists
        if self.get(name, version, propagate_error=False) is not None:
            if not edit_mode:
                raise ValidationError("journey already exists")

        # validate if its not in editing mode.
        if not edit_mode:
            is_valid, errors = UssdView.validate_ussd_journey(journey)
            if not is_valid:
                raise ValidationError("invalid journey")

        # now create journey
        return self._save(name, journey, version)
Exemplo n.º 10
0
    def save(self, name: str, journey: dict, version=None, edit_mode=False):

        # version and editor mode should not be false
        if not (version or edit_mode):
            raise TypeError("version is required if its not in editor mode")

        if edit_mode:
            version = self.edit_mode_version

        # check if this version already exists
        if self.get(name, version, propagate_error=False) is not None:
            if not edit_mode:
                raise ValidationError("journey already exists")

        # validate if its not in editing mode.
        if not edit_mode:
            is_valid, errors = UssdView.validate_ussd_journey(journey)
            if not is_valid:
                raise ValidationError("invalid journey")

        # now create journey
        return self._save(name, journey, version)
    def handle(self, *args, **options):
        error_message = {}
        for ussd_config in options["ussd_configs"]:
            if not os.path.isfile(ussd_config):
                raise CommandError("This file path {} does not exist".format(ussd_config))
            namespace = 'validation'
            load_yaml(ussd_config, namespace)


            ussd_screens = staticconf.config. \
                get_namespace(namespace). \
                get_config_values()

            is_valid, error_ussd_config_message = UssdView.validate_ussd_journey(
                ussd_screens)
            error_message[ussd_config] = dict(
                valid=is_valid,
                error_message=error_ussd_config_message
            )
            if not is_valid:
                raise CommandError(json.dumps(error_message))

        self.stdout.write(json.dumps(error_message))