Exemple #1
0
    def test_returns_400_unknown_type(self, db_request, monkeypatch):
        verify_sns_message = pretend.call_recorder(lambda *a, **kw: None)
        monkeypatch.setattr(views, "_verify_sns_message", verify_sns_message)

        e = EmailFactory.create()
        em = EmailMessageFactory.create(to=e.email)

        event_id = str(uuid.uuid4())
        db_request.json_body = {
            "Type": "Notification",
            "MessageId": event_id,
            "Message": json.dumps(
                {
                    "notificationType": "Not Really A Type",
                    "mail": {"messageId": em.message_id},
                }
            ),
        }

        with pytest.raises(HTTPBadRequest, match="Unknown notificationType"):
            views.notification(db_request)

        assert verify_sns_message.calls == [
            pretend.call(db_request, db_request.json_body)
        ]
Exemple #2
0
    def test_returns_400_unknown_type(self, db_request, monkeypatch):
        verify_sns_message = pretend.call_recorder(lambda *a, **kw: None)
        monkeypatch.setattr(views, "_verify_sns_message", verify_sns_message)

        e = EmailFactory.create()
        em = EmailMessageFactory.create(to=e.email)

        event_id = str(uuid.uuid4())
        db_request.json_body = {
            "Type":
            "Notification",
            "MessageId":
            event_id,
            "Message":
            json.dumps({
                "notificationType": "Not Really A Type",
                "mail": {
                    "messageId": em.message_id
                },
            }),
        }

        with pytest.raises(HTTPBadRequest, match="Unknown notificationType"):
            views.notification(db_request)

        assert verify_sns_message.calls == [
            pretend.call(db_request, db_request.json_body),
        ]
    def test_error_fetching_pubkey(self, pyramid_request, monkeypatch, metrics):
        def raiser(*args, **kwargs):
            raise requests.HTTPError

        monkeypatch.setattr(views, "_verify_sns_message", raiser)

        pyramid_request.json_body = {"Type": "Notification"}

        with pytest.raises(HTTPServiceUnavailable):
            views.notification(pyramid_request)

        assert metrics.increment.calls == [
            pretend.call("warehouse.ses.sns_verify.error")
        ]
Exemple #4
0
    def test_delivery(self, db_request, monkeypatch):
        verify_sns_message = pretend.call_recorder(lambda *a, **kw: None)
        monkeypatch.setattr(views, "_verify_sns_message", verify_sns_message)

        e = EmailFactory.create()
        em = EmailMessageFactory.create(to=e.email)

        event_id = str(uuid.uuid4())
        db_request.json_body = {
            "Type": "Notification",
            "MessageId": event_id,
            "Message": json.dumps(
                {
                    "notificationType": "Delivery",
                    "mail": {"messageId": em.message_id},
                    "delivery": {"someData": "this is some data"},
                }
            ),
        }

        resp = views.notification(db_request)

        assert verify_sns_message.calls == [
            pretend.call(db_request, db_request.json_body)
        ]
        assert resp.status_code == 200

        assert em.status is EmailStatuses.Delivered

        event = db_request.db.query(Event).filter(Event.event_id == event_id).one()

        assert event.email == em
        assert event.event_type is EventTypes.Delivery
        assert event.data == {"someData": "this is some data"}
Exemple #5
0
    def test_delivery(self, db_request, monkeypatch):
        verify_sns_message = pretend.call_recorder(lambda *a, **kw: None)
        monkeypatch.setattr(views, "_verify_sns_message", verify_sns_message)

        e = EmailFactory.create()
        em = EmailMessageFactory.create(to=e.email)

        event_id = str(uuid.uuid4())
        db_request.json_body = {
            "Type": "Notification",
            "MessageId": event_id,
            "Message": json.dumps({
                "notificationType": "Delivery",
                "mail": {"messageId": em.message_id},
                "delivery": {"someData": "this is some data"},
            }),
        }

        resp = views.notification(db_request)

        assert verify_sns_message.calls == [
            pretend.call(db_request, db_request.json_body),
        ]
        assert resp.status_code == 200

        assert em.status is EmailStatuses.Delivered

        event = (
            db_request.db.query(Event)
                         .filter(Event.event_id == event_id)
                         .one())

        assert event.email == em
        assert event.event_type is EventTypes.Delivery
        assert event.data == {"someData": "this is some data"}
Exemple #6
0
    def test_returns_400_when_unknown_message(self, db_request, monkeypatch):
        verify_sns_message = pretend.call_recorder(lambda *a, **kw: None)
        monkeypatch.setattr(views, "_verify_sns_message", verify_sns_message)

        db_request.json_body = {
            "Type": "Notification",
            "MessageId": str(uuid.uuid4()),
            "Message": json.dumps({"mail": {"messageId": str(uuid.uuid4())}}),
        }

        with pytest.raises(HTTPBadRequest, match="Unknown messageId"):
            views.notification(db_request)

        assert verify_sns_message.calls == [
            pretend.call(db_request, db_request.json_body)
        ]
        assert db_request.db.query(EmailMessage).count() == 0
        assert db_request.db.query(Event).count() == 0
Exemple #7
0
    def test_returns_400_when_unknown_message(self, db_request, monkeypatch):
        verify_sns_message = pretend.call_recorder(lambda *a, **kw: None)
        monkeypatch.setattr(views, "_verify_sns_message", verify_sns_message)

        db_request.json_body = {
            "Type": "Notification",
            "MessageId": str(uuid.uuid4()),
            "Message": json.dumps({"mail": {"messageId": str(uuid.uuid4())}}),
        }

        with pytest.raises(HTTPBadRequest, match="Unknown messageId"):
            views.notification(db_request)

        assert verify_sns_message.calls == [
            pretend.call(db_request, db_request.json_body)
        ]
        assert db_request.db.query(EmailMessage).count() == 0
        assert db_request.db.query(Event).count() == 0
Exemple #8
0
    def test_returns_200_existing_event(self, db_request, monkeypatch):
        verify_sns_message = pretend.call_recorder(lambda *a, **kw: None)
        monkeypatch.setattr(views, "_verify_sns_message", verify_sns_message)

        event = EventFactory.create()

        db_request.json_body = {"Type": "Notification", "MessageId": event.event_id}

        resp = views.notification(db_request)

        assert verify_sns_message.calls == [
            pretend.call(db_request, db_request.json_body)
        ]
        assert resp.status_code == 200
        assert db_request.db.query(Event).all() == [event]
Exemple #9
0
    def test_returns_200_existing_event(self, db_request, monkeypatch):
        verify_sns_message = pretend.call_recorder(lambda *a, **kw: None)
        monkeypatch.setattr(views, "_verify_sns_message", verify_sns_message)

        event = EventFactory.create()

        db_request.json_body = {"Type": "Notification", "MessageId": event.event_id}

        resp = views.notification(db_request)

        assert verify_sns_message.calls == [
            pretend.call(db_request, db_request.json_body)
        ]
        assert resp.status_code == 200
        assert db_request.db.query(Event).all() == [event]
Exemple #10
0
    def test_raises_when_invalid_type(self):
        request = pretend.stub(json_body={"Type": "SubscriptionConfirmation"})

        with pytest.raises(HTTPBadRequest):
            views.notification(request)
Exemple #11
0
    def test_raises_when_invalid_type(self):
        request = pretend.stub(json_body={"Type": "SubscriptionConfirmation"})

        with pytest.raises(HTTPBadRequest):
            views.notification(request)
Exemple #12
0
    def test_raises_when_invalid_type(self, pyramid_request):
        pyramid_request.json_body = {"Type": "SubscriptionConfirmation"}

        with pytest.raises(HTTPBadRequest):
            views.notification(pyramid_request)
Exemple #13
0
    def test_raises_when_invalid_type(self, pyramid_request):
        pyramid_request.json_body = {"Type": "SubscriptionConfirmation"}

        with pytest.raises(HTTPBadRequest):
            views.notification(pyramid_request)