Add notify to message api

This commit is contained in:
Jannis Mattheis 2018-02-03 18:14:29 +01:00 committed by Jannis Mattheis
parent 4e3d00ea98
commit 98b7bcc2d6
2 changed files with 21 additions and 1 deletions

View File

@ -22,9 +22,15 @@ type MessageDatabase interface {
CreateMessage(message *model.Message) error CreateMessage(message *model.Message) error
} }
// Notifier notifies when a new message was created.
type Notifier interface {
Notify(userID uint, message *model.Message)
}
// The MessageAPI provides handlers for managing messages. // The MessageAPI provides handlers for managing messages.
type MessageAPI struct { type MessageAPI struct {
DB MessageDatabase DB MessageDatabase
Notifier Notifier
} }
// GetMessages returns all messages from a user. // GetMessages returns all messages from a user.
@ -79,6 +85,7 @@ func (a *MessageAPI) CreateMessage(ctx *gin.Context) {
message.ApplicationID = auth.GetTokenID(ctx) message.ApplicationID = auth.GetTokenID(ctx)
message.Date = time.Now() message.Date = time.Now()
a.DB.CreateMessage(&message) a.DB.CreateMessage(&message)
a.Notifier.Notify(auth.GetUserID(ctx), &message)
ctx.JSON(200, message) ctx.JSON(200, message)
} }
} }

View File

@ -27,6 +27,7 @@ type MessageSuite struct {
a *MessageAPI a *MessageAPI
ctx *gin.Context ctx *gin.Context
recorder *httptest.ResponseRecorder recorder *httptest.ResponseRecorder
notified bool
} }
func (s *MessageSuite) BeforeTest(suiteName, testName string) { func (s *MessageSuite) BeforeTest(suiteName, testName string) {
@ -34,7 +35,12 @@ func (s *MessageSuite) BeforeTest(suiteName, testName string) {
s.recorder = httptest.NewRecorder() s.recorder = httptest.NewRecorder()
s.ctx, _ = gin.CreateTestContext(s.recorder) s.ctx, _ = gin.CreateTestContext(s.recorder)
s.db = &apimock.MockMessageDatabase{} s.db = &apimock.MockMessageDatabase{}
s.a = &MessageAPI{DB: s.db} s.notified = false
s.a = &MessageAPI{DB: s.db, Notifier: s}
}
func (s *MessageSuite) Notify(userID uint, msg *model.Message) {
s.notified = true
} }
func (s *MessageSuite) Test_GetMessages() { func (s *MessageSuite) Test_GetMessages() {
@ -166,6 +172,7 @@ func (s *MessageSuite) Test_CreateMessage_onJson_allParams() {
s.db.AssertCalled(s.T(), "CreateMessage", expected) s.db.AssertCalled(s.T(), "CreateMessage", expected)
assert.Equal(s.T(), 200, s.recorder.Code) assert.Equal(s.T(), 200, s.recorder.Code)
assert.True(s.T(), s.notified)
} }
func (s *MessageSuite) Test_CreateMessage_onlyRequired() { func (s *MessageSuite) Test_CreateMessage_onlyRequired() {
@ -184,6 +191,7 @@ func (s *MessageSuite) Test_CreateMessage_onlyRequired() {
s.db.AssertCalled(s.T(), "CreateMessage", expected) s.db.AssertCalled(s.T(), "CreateMessage", expected)
assert.Equal(s.T(), 200, s.recorder.Code) assert.Equal(s.T(), 200, s.recorder.Code)
assert.True(s.T(), s.notified)
} }
func (s *MessageSuite) Test_CreateMessage_failWhenNoMessage() { func (s *MessageSuite) Test_CreateMessage_failWhenNoMessage() {
@ -196,6 +204,7 @@ func (s *MessageSuite) Test_CreateMessage_failWhenNoMessage() {
s.db.AssertNotCalled(s.T(), "CreateMessage", mock.Anything) s.db.AssertNotCalled(s.T(), "CreateMessage", mock.Anything)
assert.Equal(s.T(), 400, s.recorder.Code) assert.Equal(s.T(), 400, s.recorder.Code)
assert.False(s.T(), s.notified)
} }
func (s *MessageSuite) Test_CreateMessage_failWhenNoTitle() { func (s *MessageSuite) Test_CreateMessage_failWhenNoTitle() {
@ -208,6 +217,7 @@ func (s *MessageSuite) Test_CreateMessage_failWhenNoTitle() {
s.db.AssertNotCalled(s.T(), "CreateMessage", mock.Anything) s.db.AssertNotCalled(s.T(), "CreateMessage", mock.Anything)
assert.Equal(s.T(), 400, s.recorder.Code) assert.Equal(s.T(), 400, s.recorder.Code)
assert.False(s.T(), s.notified)
} }
func (s *MessageSuite) Test_CreateMessage_failWhenPriorityNotNumber() { func (s *MessageSuite) Test_CreateMessage_failWhenPriorityNotNumber() {
@ -220,6 +230,7 @@ func (s *MessageSuite) Test_CreateMessage_failWhenPriorityNotNumber() {
s.db.AssertNotCalled(s.T(), "CreateMessage", mock.Anything) s.db.AssertNotCalled(s.T(), "CreateMessage", mock.Anything)
assert.Equal(s.T(), 400, s.recorder.Code) assert.Equal(s.T(), 400, s.recorder.Code)
assert.False(s.T(), s.notified)
} }
func (s *MessageSuite) Test_CreateMessage_onQueryData() { func (s *MessageSuite) Test_CreateMessage_onQueryData() {
@ -238,6 +249,7 @@ func (s *MessageSuite) Test_CreateMessage_onQueryData() {
s.db.AssertCalled(s.T(), "CreateMessage", expected) s.db.AssertCalled(s.T(), "CreateMessage", expected)
assert.Equal(s.T(), 200, s.recorder.Code) assert.Equal(s.T(), 200, s.recorder.Code)
assert.True(s.T(), s.notified)
} }
func (s *MessageSuite) Test_CreateMessage_onFormData() { func (s *MessageSuite) Test_CreateMessage_onFormData() {
@ -256,4 +268,5 @@ func (s *MessageSuite) Test_CreateMessage_onFormData() {
s.db.AssertCalled(s.T(), "CreateMessage", expected) s.db.AssertCalled(s.T(), "CreateMessage", expected)
assert.Equal(s.T(), 200, s.recorder.Code) assert.Equal(s.T(), 200, s.recorder.Code)
assert.True(s.T(), s.notified)
} }