package handler import ( "encoding/json" "net/http" "net/http/httptest" "strings" "testing" "time" "git.kundeng.us/phoenix/textsender-models/tx0/message" "git.kundeng.us/phoenix/textsender-models/tx0/message/scheduling" "github.com/google/uuid" "github.com/stretchr/testify/assert" "git.kundeng.us/phoenix/textsender-api/internal/handler/endpoint" "git.kundeng.us/phoenix/textsender-api/internal/store/mock" ) func TestRecordMessageEventResponseWithMock(t *testing.T) { now := time.Now() mockStore := mock.NewMockScheduledMessageEventStore() contactStore := mock.NewMockContactStore() messageStore := mock.NewMockMessageStore() schMsgStore := mock.NewMockScheduledMessageStore() merStore := mock.NewMockMessageEventResponseStore() apiApp, err := GetApp() assert.NoError(t, err, "Error getting app") handler := NewEventResponseHandler(apiApp, merStore) recipientId := uuid.New() messageId := uuid.New() scheduledMessageId := uuid.New() testUserId := uuid.New() con := testContact(recipientId, testUserId) msg := testMessage(messageId, testUserId) schMsg := testScheduledMessage(scheduledMessageId, testUserId, now) event := scheduling.ScheduledMessageEvent{} ctx := t.Context() if err := contactStore.CreateContact(ctx, &con); err != nil { assert.NoError(t, err, "Error creating contact: %v", err) } else if err = messageStore.CreateMessage(ctx, &msg); err != nil { assert.NoError(t, err, "Error creating message: %v", err) } else if err = schMsgStore.CreateScheduledMessage(ctx, &schMsg); err != nil { assert.NoError(t, err, "Error creating scheduled message: %v", err) } event.MessageId = msg.Id event.RecipientId = con.Id event.ScheduledMessageId = schMsg.Id if err := mockStore.CreateScheduledMessageEvent(ctx, &event); err != nil { assert.NoError(t, err, "Error creating scheduled message event: %v", err) } sent := now.Add(30 * time.Minute) bytes := []byte("{\"body\":\"Whoknows?\",\"num_segments\":\"0\",\"direction\":\"outbound-api\",\"from\":\"+12243026041\",\"to\":\"+16303831708\",\"date_updated\":\"Sat,29Nov202519:06:59+0000\",\"uri\":\"/2010-04-01/Accounts/ACefa1ef516314c9d1a68cbd657de49277/Messages/SM1193a529e7f7a840667cd1e0f13ea95a.json\",\"account_sid\":\"ACefa1ef516314c9d1a68cbd657de49277\",\"num_media\":\"0\",\"status\":\"scheduled\",\"messaging_service_sid\":\"MG803f3676706b92eb02e18dd820c447f2\",\"sid\":\"SM1193a529e7f7a840667cd1e0f13ea95a\",\"date_created\":\"Sat,29Nov202519:06:59+0000\",\"api_version\":\"2010-04-01\",\"subresource_uris\":{\"media\":\"/2010-04-01/Accounts/ACefa1ef516314c9d1a68cbd657de49277/Messages/SM1193a529e7f7a840667cd1e0f13ea95a/Media.json\"}}") testReq := RecordEventRequest{ScheduledMessageEventId: event.Id, Response: bytes, UserId: schMsg.UserId, Sent: &sent} jsonValue, _ := json.Marshal(testReq) req, _ := http.NewRequest("POST", endpoint.RecordEventResponse, strings.NewReader(string(jsonValue))) rr := httptest.NewRecorder() handler.RecordResponse(rr, req) assert.Equal(t, http.StatusCreated, rr.Code) var response RecordEventResponse err = json.Unmarshal(rr.Body.Bytes(), &response) assert.NoError(t, err, "Error parsing message event response:%v", err) assert.NotEmpty(t, response.Data, "No message event response created") var msgEventResp message.MessageEventResponse msgEventResp = *response.Data[0] assert.NotEmpty(t, msgEventResp.Response, "The response of the message event response is empty") assert.Equal(t, msgEventResp.Response, testReq.Response, "Responses do not match") }