Exemplo n.º 1
0
    def test_lookup_owner_other_http_error(self, monkeypatch):
        response = pretend.stub(
            # anything that isn't 404 or 403
            status_code=422,
            raise_for_status=pretend.raiser(HTTPError),
            content=b"fake-content",
        )
        requests = pretend.stub(
            get=pretend.call_recorder(lambda o, **kw: response),
            HTTPError=HTTPError)
        monkeypatch.setattr(forms, "requests", requests)

        sentry_sdk = pretend.stub(
            capture_message=pretend.call_recorder(lambda s: None))
        monkeypatch.setattr(forms, "sentry_sdk", sentry_sdk)

        form = forms.GitHubProviderForm(api_token="fake-token")
        with pytest.raises(wtforms.validators.ValidationError):
            form._lookup_owner("some-owner")

        assert requests.get.calls == [
            pretend.call(
                "https://api.github.com/users/some-owner",
                headers={
                    "Accept": "application/vnd.github.v3+json",
                    "Authorization": "token fake-token",
                },
                allow_redirects=True,
            )
        ]

        assert sentry_sdk.capture_message.calls == [
            pretend.call("Unexpected error from GitHub user lookup: "
                         "response.content=b'fake-content'")
        ]
Exemplo n.º 2
0
    def test_lookup_owner_succeeds(self, monkeypatch):
        fake_owner_info = pretend.stub()
        response = pretend.stub(
            status_code=200,
            raise_for_status=pretend.call_recorder(lambda: None),
            json=lambda: fake_owner_info,
        )
        requests = pretend.stub(
            get=pretend.call_recorder(lambda o, **kw: response),
            HTTPError=HTTPError)
        monkeypatch.setattr(forms, "requests", requests)

        form = forms.GitHubProviderForm(api_token="fake-token")
        info = form._lookup_owner("some-owner")

        assert requests.get.calls == [
            pretend.call(
                "https://api.github.com/users/some-owner",
                headers={
                    "Accept": "application/vnd.github.v3+json",
                    "Authorization": "token fake-token",
                },
                allow_redirects=True,
            )
        ]
        assert response.raise_for_status.calls == [pretend.call()]
        assert info == fake_owner_info
Exemplo n.º 3
0
    def test_lookup_owner_403(self, monkeypatch):
        response = pretend.stub(
            status_code=403,
            raise_for_status=pretend.raiser(HTTPError),
            json=lambda: {"message": "fake-message"},
        )
        requests = pretend.stub(
            get=pretend.call_recorder(lambda o, **kw: response),
            HTTPError=HTTPError)
        monkeypatch.setattr(forms, "requests", requests)

        sentry_sdk = pretend.stub(
            capture_message=pretend.call_recorder(lambda s: None))
        monkeypatch.setattr(forms, "sentry_sdk", sentry_sdk)

        form = forms.GitHubProviderForm(api_token="fake-token")
        with pytest.raises(wtforms.validators.ValidationError):
            form._lookup_owner("some-owner")

        assert requests.get.calls == [
            pretend.call(
                "https://api.github.com/users/some-owner",
                headers={
                    "Accept": "application/vnd.github.v3+json",
                    "Authorization": "token fake-token",
                },
                allow_redirects=True,
            )
        ]
        assert sentry_sdk.capture_message.calls == [
            pretend.call("Exceeded GitHub rate limit for user lookups. "
                         "Reason: {'message': 'fake-message'}")
        ]
Exemplo n.º 4
0
    def test_validate_basic_invalid_fields(self, monkeypatch, data):
        form = forms.GitHubProviderForm(MultiDict(data),
                                        api_token=pretend.stub())

        # We're testing only the basic validation here.
        owner_info = {"login": "******", "id": "1234"}
        monkeypatch.setattr(form, "_lookup_owner", lambda o: owner_info)

        assert not form.validate()
Exemplo n.º 5
0
    def test_validate_owner(self, monkeypatch):
        form = forms.GitHubProviderForm(api_token=pretend.stub())

        owner_info = {"login": "******", "id": "1234"}
        monkeypatch.setattr(form, "_lookup_owner", lambda o: owner_info)

        field = pretend.stub(data="SOME-USERNAME")
        form.validate_owner(field)

        assert form.normalized_owner == "some-username"
        assert form.owner_id == "1234"
Exemplo n.º 6
0
    def test_validate(self, monkeypatch):
        data = MultiDict({
            "owner": "some-owner",
            "repository": "some-repo",
            "workflow_filename": "some-workflow.yml",
        })
        form = forms.GitHubProviderForm(MultiDict(data),
                                        api_token=pretend.stub())

        # We're testing only the basic validation here.
        owner_info = {"login": "******", "id": "1234"}
        monkeypatch.setattr(form, "_lookup_owner", lambda o: owner_info)

        assert form.validate()
Exemplo n.º 7
0
    def test_lookup_owner_http_timeout(self, monkeypatch):
        requests = pretend.stub(
            get=pretend.raiser(Timeout),
            Timeout=Timeout,
            HTTPError=HTTPError,
        )
        monkeypatch.setattr(forms, "requests", requests)

        sentry_sdk = pretend.stub(
            capture_message=pretend.call_recorder(lambda s: None))
        monkeypatch.setattr(forms, "sentry_sdk", sentry_sdk)

        form = forms.GitHubProviderForm(api_token="fake-token")
        with pytest.raises(wtforms.validators.ValidationError):
            form._lookup_owner("some-owner")

        assert sentry_sdk.capture_message.calls == [
            pretend.call(
                "Timeout from GitHub user lookup API (possibly offline)")
        ]
Exemplo n.º 8
0
    def test_lookup_owner_404(self, monkeypatch):
        response = pretend.stub(status_code=404,
                                raise_for_status=pretend.raiser(HTTPError))
        requests = pretend.stub(
            get=pretend.call_recorder(lambda o, **kw: response),
            HTTPError=HTTPError)
        monkeypatch.setattr(forms, "requests", requests)

        form = forms.GitHubProviderForm(api_token="fake-token")
        with pytest.raises(wtforms.validators.ValidationError):
            form._lookup_owner("some-owner")

        assert requests.get.calls == [
            pretend.call(
                "https://api.github.com/users/some-owner",
                headers={
                    "Accept": "application/vnd.github.v3+json",
                    "Authorization": "token fake-token",
                },
                allow_redirects=True,
            )
        ]
Exemplo n.º 9
0
    def test_creation(self, token, headers):
        form = forms.GitHubProviderForm(api_token=token)

        assert form._api_token == token
        assert form._headers_auth() == headers
Exemplo n.º 10
0
    def test_validate_workflow_filename(self, workflow_filename):
        form = forms.GitHubProviderForm(api_token=pretend.stub())
        field = pretend.stub(data=workflow_filename)

        with pytest.raises(wtforms.validators.ValidationError):
            form.validate_workflow_filename(field)