Esempio n. 1
0
 def test_fetch_stream_changesets(self):
     event = self.load_event("StreamChangesets")
     cmd = event_to_command(event)
     assert isinstance(cmd, FetchStreamChangesets)
     assert cmd.stream_id == "fe80eaef-90c3-41be-9bc0-3f85458b9a8e"
     assert cmd.from_changeset == 1
     assert cmd.to_changeset == 5
Esempio n. 2
0
 def test_global_changesets_without_explicit_limit(self):
     event = self.load_event("GlobalChangesets")
     del event["queryStringParameters"]["limit"]
     cmd = event_to_command(event)
     assert isinstance(cmd, FetchGlobalChangesets)
     assert cmd.checkpoint == 44
     assert cmd.limit == None
Esempio n. 3
0
 def test_fetch_stream_events(self):
     event = self.load_event("StreamEvents")
     cmd = event_to_command(event)
     assert isinstance(cmd, FetchStreamEvents)
     assert cmd.stream_id == "d2333e6b-65a7-4a10-9886-2dd2fe873bed"
     assert cmd.from_event == 1
     assert cmd.to_event == 5
Esempio n. 4
0
 def test_fetch_stream_changesets_without_to(self):
     event = self.load_event("StreamChangesets")
     del event["queryStringParameters"]["to"]
     cmd = event_to_command(event)
     assert isinstance(cmd, FetchStreamChangesets)
     assert cmd.stream_id == "fe80eaef-90c3-41be-9bc0-3f85458b9a8e"
     assert cmd.from_changeset == 1
     assert cmd.to_changeset == None
Esempio n. 5
0
 def test_commit(self):
     event = self.load_event("Commit")
     cmd = event_to_command(event)
     assert isinstance(cmd, Commit)
     assert cmd.stream_id == "7ef3c378-8c97-49fe-97ba-f5afe719ea1c"
     assert cmd.expected_last_changeset == 7
     assert cmd.events == json.loads(event["body"])["events"]
     assert cmd.metadata == json.loads(event["body"])["metadata"]
Esempio n. 6
0
 def test_fetch_stream_events_without_to(self):
     event = self.load_event("StreamEvents")
     del event["queryStringParameters"]["to"]
     cmd = event_to_command(event)
     assert isinstance(cmd, FetchStreamEvents)
     assert cmd.stream_id == "d2333e6b-65a7-4a10-9886-2dd2fe873bed"
     assert cmd.from_event == 1
     assert cmd.to_event == None
Esempio n. 7
0
 def test_commit_with_implicit_expected_changeset(self):
     event = self.load_event("Commit")
     del event["queryStringParameters"]["expected_last_changeset"]
     cmd = event_to_command(event)
     assert isinstance(cmd, Commit)
     assert cmd.stream_id == "7ef3c378-8c97-49fe-97ba-f5afe719ea1c"
     assert cmd.expected_last_changeset == 0
     assert cmd.events == json.loads(event["body"])["events"]
     assert cmd.metadata == json.loads(event["body"])["metadata"]
Esempio n. 8
0
 def test_commit_with_last_event_as_empty_string(self):
     event = self.load_event("Commit")
     event["queryStringParameters"]["expected_last_event"] = ""
     event["queryStringParameters"]["expected_last_changeset"] = ""
     cmd = event_to_command(event)
     assert isinstance(cmd, Commit)
     assert cmd.stream_id == "7ef3c378-8c97-49fe-97ba-f5afe719ea1c"
     assert cmd.expected_last_event == None
     assert cmd.expected_last_changeset == 0
def request_handler(event, context):
    logger.info(f"Processing incoming event: {event}")    
    pretty_print = True
    parsed_event = event_to_command(event, context)
    logger.debug(f"Event was parsed to: {parsed_event}")
    if isinstance(parsed_event, Response):
        return render(parsed_event, pretty_print)

    handler = route_request(parsed_event)
    response = handler.execute(parsed_event)
    return render(response, pretty_print)
Esempio n. 10
0
 def test_assign_global_index(self):
     event = self.load_event("AssignGlobalIndex")
     cmd = event_to_command(event)
     assert isinstance(cmd, AssignGlobalIndexes)
     self.assertListEqual(cmd.changesets, [{
         "stream_id": "99038933-e620-444d-9033-4128254f0cbd",
         "changeset_id": 2
     }, {
         "stream_id": "206bc1ed-8e67-4a64-a596-8b32c0c20a97",
         "changeset_id": 1
     }])
Esempio n. 11
0
 def test_global_changesets_with_invalid_limit2(self):
     event = self.load_event("GlobalChangesets")
     event["queryStringParameters"]["limit"] = "0"
     err = event_to_command(event)
     assert isinstance(err, Response)
     assert err.http_status == 400
     self.assertDictEqual(
         err.body, {
             "error":
             "INVALID_LIMIT",
             "message":
             '"0" is an invalid limit value. Expected an integer value greater than 0.'
         })
Esempio n. 12
0
    def test_commit_without_stream_id(self):
        event = self.load_event("Commit")
        del event["pathParameters"]["stream_id"]

        err = event_to_command(event)

        assert isinstance(err, Response)
        assert err.http_status == 400
        self.assertDictEqual(
            err.body, {
                "error": "MISSING_STREAM_ID",
                "message": 'stream_id is a required value'
            })
Esempio n. 13
0
 def test_global_changesets_with_invalid_checkpoint2(self):
     event = self.load_event("GlobalChangesets")
     event["queryStringParameters"]["checkpoint"] = "-2"
     err = event_to_command(event)
     assert isinstance(err, Response)
     assert err.http_status == 400
     self.assertDictEqual(
         err.body, {
             "error":
             "INVALID_CHECKPOINT",
             "message":
             '"-2" is an invalid checkpoint value. Expected a positive integer value.'
         })
Esempio n. 14
0
 def test_commit_with_both_expected_event_and_changeset(self):
     event = self.load_event("Commit")
     event["queryStringParameters"]["expected_last_event"] = "0"
     event["queryStringParameters"]["expected_last_changeset"] = "0"
     err = event_to_command(event)
     assert isinstance(err, Response)
     assert err.http_status == 400
     self.assertDictEqual(
         err.body, {
             "stream_id":
             "7ef3c378-8c97-49fe-97ba-f5afe719ea1c",
             "error":
             "BOTH_EXPECTED_CHANGESET_AND_EVENT_ARE_SET",
             "message":
             'Cannot use both "last_changeset_id" and "last_event_id" for concurrency management. Specify only one value.'
         })
Esempio n. 15
0
    def test_commit_with_negative_expected_changeset(self):
        event = self.load_event("Commit")
        event["queryStringParameters"]["expected_last_changeset"] = -1

        err = event_to_command(event)

        assert isinstance(err, Response)
        assert err.http_status == 400
        self.assertDictEqual(
            err.body, {
                "stream_id":
                "7ef3c378-8c97-49fe-97ba-f5afe719ea1c",
                "error":
                "INVALID_EXPECTED_CHANGESET_ID",
                "message":
                f'The specified expected changeset id("-1") is invalid. Expected a positive integer.'
            })
Esempio n. 16
0
    def test_fetch_stream_events_invalid_from(self):
        event = self.load_event("StreamEvents")
        event["queryStringParameters"]["from"] = "test"

        err = event_to_command(event)

        assert isinstance(err, Response)
        assert err.http_status == 400
        self.assertDictEqual(
            err.body, {
                "stream_id":
                "d2333e6b-65a7-4a10-9886-2dd2fe873bed",
                "error":
                "INVALID_EVENT_FILTERING_PARAMS",
                "message":
                'The filtering params(from, to) have to be positive integer values'
            })
Esempio n. 17
0
    def test_fetch_stream_changesets_invalid_from(self):
        event = self.load_event("StreamChangesets")
        event["queryStringParameters"]["from"] = "test"

        err = event_to_command(event)

        assert isinstance(err, Response)
        assert err.http_status == 400
        self.assertDictEqual(
            err.body, {
                "stream_id":
                "fe80eaef-90c3-41be-9bc0-3f85458b9a8e",
                "error":
                "INVALID_CHANGESET_FILTERING_PARAMS",
                "message":
                'The filtering params(from, to) have to be positive integer values'
            })
Esempio n. 18
0
    def test_fetch_stream_events_wrong_order_of_from_and_to(self):
        event = self.load_event("StreamEvents")
        event["queryStringParameters"]["from"] = "7"
        event["queryStringParameters"]["to"] = "1"

        err = event_to_command(event)

        assert isinstance(err, Response)
        assert err.http_status == 400
        self.assertDictEqual(
            err.body, {
                "stream_id":
                "d2333e6b-65a7-4a10-9886-2dd2fe873bed",
                "error":
                "INVALID_EVENT_FILTERING_PARAMS",
                "message":
                f'The higher boundary cannot be lower than the lower boundary: 7(from) > 1(to)'
            })
Esempio n. 19
0
    def test_fetch_stream_changesets_wrong_order_of_from_and_to(self):
        event = self.load_event("StreamChangesets")
        event["queryStringParameters"]["from"] = "7"
        event["queryStringParameters"]["to"] = "1"

        err = event_to_command(event)

        assert isinstance(err, Response)
        assert err.http_status == 400
        self.assertDictEqual(
            err.body, {
                "stream_id":
                "fe80eaef-90c3-41be-9bc0-3f85458b9a8e",
                "error":
                "INVALID_CHANGESET_FILTERING_PARAMS",
                "message":
                f'The higher boundary cannot be lower than the lower boundary: 7(from) > 1(to)'
            })
Esempio n. 20
0
 def test_version(self):
     event = self.load_event("Version")
     cmd = event_to_command(event)
     assert isinstance(cmd, Version)
Esempio n. 21
0
 def test_global_changesets(self):
     event = self.load_event("GlobalChangesets")
     cmd = event_to_command(event)
     assert isinstance(cmd, FetchGlobalChangesets)
     assert cmd.checkpoint == 44
     assert cmd.limit == 120
def indexer(event, context):
    logger.info(f"Processing incoming event: {event}")
    parsed_event = event_to_command(event, context)
    logger.debug(f"Event was parsed to: {parsed_event}")
    handler = route_request(parsed_event)
    handler.execute(parsed_event)