Beispiel #1
0
def test_get_concrete_values_returns_label_from_form_expert_with_two_widgets():
    # Arrange
    widgets = [{
        'label': 'some_label_1',
        'label_key': 'some_label_key_1'
    }, {
        'label': 'some_label_2',
        'label_key': 'some_label_key_2'
    }]
    form_expert_client = FormExpertClient()

    # Act
    with patch('requests.post') as mock_post_request:
        mock_post_request.return_value = TwoWidgetResponseStub(status_code=200)
        result = form_expert_client.get_concrete_values(widgets)

    # Assert
    assert result == [{
        'label': 'some_label_1',
        'label_key': 'some_label_key_1',
        'value': 'label_from_form_expert_1'
    }, {
        'label': 'some_label_2',
        'label_key': 'some_label_key_2',
        'value': 'label_from_form_expert_2'
    }]
Beispiel #2
0
def test_form_expert_client_sets_service_url_from_environment_on_instantiation(
):
    # Arrange and Act
    with patch('os.environ') as mock_environment:
        environment = {'FORM_EXPERT_URL': 'url_from_environment'}
        mock_environment.__contains__.return_value = True
        mock_environment.__getitem__.side_effect = environment.__getitem__
        form_expert_client = FormExpertClient()

    # Assert
    assert form_expert_client.FORM_EXPERT_URL == 'url_from_environment'
Beispiel #3
0
def test_get_concrete_values_raises_environment_error_when_form_expert_response_is_not_200(
):
    # Arrange
    widget = {'label': 'some_label', 'label_key': 'some_label_key'}
    widgets = [widget]
    form_expert_client = FormExpertClient()

    # Act and Assert
    with patch('requests.post') as mock_post_request:
        mock_post_request.return_value = ResponseStub(status_code=404)
        with pytest.raises(EnvironmentError):
            form_expert_client.get_concrete_values(widgets)
Beispiel #4
0
def test_get_concrete_values_returns_empty_list_given_no_widgets():
    # Arrange
    widgets = []
    form_expert_client = FormExpertClient()

    # Act
    with patch('requests.post') as mock_post_request:
        mock_post_request.return_value = ResponseStub(status_code=200)
        result = form_expert_client.get_concrete_values(widgets)

    # Assert
    assert result == []
Beispiel #5
0
def test_get_concrete_values_makes_appropriate_post_request_with_no_widgets():
    # Arrange
    widgets = []
    form_expert_client = FormExpertClient()

    # Act
    with patch('requests.post') as mock_post_request:
        mock_post_request.return_value = ResponseStub(status_code=200)
        form_expert_client.get_concrete_values(widgets)

    # Assert
    url = 'http://form-expert/api/v1/fill_form'
    mock_post_request.assert_called_once_with(url, json=widgets, verify=False)
Beispiel #6
0
def test_get_concrete_value_returns_label_from_form_expert_with_successful_request_and_known_label(
):
    # Arrange
    label_key = 'some_label_key'
    form_expert_client = FormExpertClient()

    # Act
    with patch('requests.post') as mock_post_request:
        mock_post_request.return_value = ResponseStub(status_code=200)
        result = form_expert_client.get_concrete_value(label_key)

    # Assert
    assert result == 'label_from_form_expert'
Beispiel #7
0
def test_get_concrete_value_returns_fallback_value_when_form_expert_result_is_none(
):
    # Arrange
    label_key = 'some_label_key'
    form_expert_client = FormExpertClient()
    form_expert_client.fallback = Mock(return_value='fallback_value')

    # Act
    with patch('requests.post') as mock_post_request:
        mock_post_request.return_value = NoneResponseStub(status_code=200)
        result = form_expert_client.get_concrete_value(label_key)

    # Assert
    assert result == 'fallback_value'
Beispiel #8
0
def test_get_concrete_values_calls_fallback_for_a_single_label_that_is_none_in_form_expert_response(
):
    # Arrange
    widgets = [{'label': 'some_label', 'label_key': 'some_label_key'}]
    form_expert_client = FormExpertClient()
    form_expert_client.fallback = Mock(return_value='fallback_value')

    # Act
    with patch('requests.post') as mock_post_request:
        mock_post_request.return_value = NoneResponseStub(status_code=200)
        form_expert_client.get_concrete_values(widgets)

        # Assert
        form_expert_client.fallback.assert_called_with('some_label')
Beispiel #9
0
def test_get_concrete_values_returns_label_from_form_expert_with_one_widget():
    # Arrange
    widget = {'label': 'some_label', 'label_key': 'some_label_key'}
    widgets = [widget]
    form_expert_client = FormExpertClient()

    # Act
    with patch('requests.post') as mock_post_request:
        mock_post_request.return_value = ResponseStub(status_code=200)
        results = form_expert_client.get_concrete_values(widgets)

    # Assert
    assert results == [{
        'label': 'some_label',
        'label_key': 'some_label_key',
        'value': 'label_from_form_expert'
    }]
Beispiel #10
0
    def __init__(self,
                 sut_url,
                 runner_url,
                 form_expert_client=None,
                 runner_client=None,
                 page_analysis_client=None,
                 flow_generator_client=None,
                 flow_publisher=None,
                 flow_executor=None):
        """ Initializes the AgentLoop class.

        :param sut_url: The URL of the SUT.
        :param runner_url: The URL to the runner resource to be used for driving the SUT.
        """

        self.sut_url = sut_url
        self.runner_url = runner_url

        self.mapper = StateAbstracter()
        self.label_extracter = LabelExtraction()
        self.form_expert = form_expert_client if form_expert_client else FormExpertClient(
        )
        self.memory = PriorityMemory()
        self.observer = StateObserver()
        self.seq_parser = SequenceParser()
        self.flow_planner = FlowPlanner()
        self.defect_rep = DefectReporter()
        self.flow_publish = flow_publisher if flow_publisher else PlannedFlowPublisher(
        )

        self.runner = runner_client if runner_client else RunnerClient(
            self.runner_url)
        self.page_analyzer = page_analysis_client if page_analysis_client else PageAnalysisClient(
        )
        self.flow_generator = flow_generator_client if flow_generator_client else FlowGeneratorClient(
        )

        self.flow_executer = flow_executor if flow_executor else FlowExecutor(
            self.form_expert, self.page_analyzer, self.mapper,
            self.label_extracter, self.observer, self.defect_rep)