[#71] Make title in message not necessary field

This commit is contained in:
Eugene Gavrilov 2018-11-13 01:40:01 +05:00 committed by Jannis Mattheis
parent d1c035d43a
commit 0ca18b817c
7 changed files with 54 additions and 12 deletions

View File

@ -2,6 +2,7 @@ package api
import (
"errors"
"strings"
"time"
"strconv"
@ -129,7 +130,11 @@ func (a *MessageAPI) DeleteMessage(ctx *gin.Context) {
func (a *MessageAPI) CreateMessage(ctx *gin.Context) {
message := model.Message{}
if err := ctx.Bind(&message); err == nil {
message.ApplicationID = a.DB.GetApplicationByToken(auth.GetTokenID(ctx)).ID
application := a.DB.GetApplicationByToken(auth.GetTokenID(ctx))
message.ApplicationID = application.ID
if strings.TrimSpace(message.Title) == "" {
message.Title = application.Name
}
message.Date = timeNow()
a.DB.CreateMessage(&message)
a.Notifier.Notify(auth.GetUserID(ctx), &message)

View File

@ -332,7 +332,7 @@ func (s *MessageSuite) Test_CreateMessage_onJson_allParams() {
assert.True(s.T(), s.notified)
}
func (s *MessageSuite) Test_CreateMessage_onlyRequired() {
func (s *MessageSuite) Test_CreateMessage_WithTitle() {
t, _ := time.Parse("2006/01/02", "2017/01/02")
timeNow = func() time.Time { return t }
defer func() { timeNow = time.Now }()
@ -366,18 +366,36 @@ func (s *MessageSuite) Test_CreateMessage_failWhenNoMessage() {
assert.False(s.T(), s.notified)
}
func (s *MessageSuite) Test_CreateMessage_failWhenNoTitle() {
func (s *MessageSuite) Test_CreateMessage_WithoutTitle() {
auth.RegisterAuthentication(s.ctx, nil, 4, "app-token")
s.db.User(4).AppWithToken(8, "app-token")
s.db.User(4).AppWithTokenAndName(8, "app-token", "Application name")
s.ctx.Request = httptest.NewRequest("POST", "/token", strings.NewReader(`{"message": "mymessage"}`))
s.ctx.Request.Header.Set("Content-Type", "application/json")
s.a.CreateMessage(s.ctx)
assert.Empty(s.T(), s.db.GetMessagesByApplication(8))
assert.Equal(s.T(), 400, s.recorder.Code)
assert.False(s.T(), s.notified)
msgs := s.db.GetMessagesByApplication(8)
assert.Len(s.T(), msgs, 1)
assert.Equal(s.T(), "Application name", msgs[0].Title)
assert.Equal(s.T(), 200, s.recorder.Code)
assert.True(s.T(), s.notified)
}
func (s *MessageSuite) Test_CreateMessage_WithBlankTitle() {
auth.RegisterAuthentication(s.ctx, nil, 4, "app-token")
s.db.User(4).AppWithTokenAndName(8, "app-token", "Application name")
s.ctx.Request = httptest.NewRequest("POST", "/token", strings.NewReader(`{"message": "mymessage", "title": " "}`))
s.ctx.Request.Header.Set("Content-Type", "application/json")
s.a.CreateMessage(s.ctx)
msgs := s.db.GetMessagesByApplication(8)
assert.Len(s.T(), msgs, 1)
assert.Equal(s.T(), "Application name", msgs[0].Title)
assert.Equal(s.T(), 200, s.recorder.Code)
assert.True(s.T(), s.notified)
}
func (s *MessageSuite) Test_CreateMessage_failWhenPriorityNotNumber() {

View File

@ -16,7 +16,7 @@
//
// Schemes: http, https
// Host: localhost
// Version: 1.0.4
// Version: 1.0.5
// License: MIT https://github.com/gotify/server/blob/master/LICENSE
//
// Consumes:

View File

@ -17,7 +17,7 @@
"name": "MIT",
"url": "https://github.com/gotify/server/blob/master/LICENSE"
},
"version": "1.0.4"
"version": "1.0.5"
},
"host": "localhost",
"paths": {
@ -1255,7 +1255,6 @@
"id",
"appid",
"message",
"title",
"date"
],
"properties": {

View File

@ -27,9 +27,8 @@ type Message struct {
Message string `form:"message" query:"message" json:"message" binding:"required"`
// The title of the message.
//
// required: true
// example: Backup
Title string `form:"title" query:"title" json:"title" binding:"required"`
Title string `form:"title" query:"title" json:"title"`
// The priority of the message.
//
// example: 2

View File

@ -80,6 +80,19 @@ func (ab *AppClientBuilder) NewAppWithToken(id uint, token string) *model.Applic
return application
}
// AppWithTokenAndName creates an application with a token and name and returns a message builder.
func (ab *AppClientBuilder) AppWithTokenAndName(id uint, token, name string) *MessageBuilder {
ab.NewAppWithTokenAndName(id, token, name)
return &MessageBuilder{db: ab.db, appID: id}
}
// NewAppWithTokenAndName creates an application with a token and name and returns the app.
func (ab *AppClientBuilder) NewAppWithTokenAndName(id uint, token, name string) *model.Application {
application := &model.Application{ID: id, UserID: ab.userID, Token: token, Name: name}
ab.db.CreateApplication(application)
return application
}
// Client creates a client and returns itself.
func (ab *AppClientBuilder) Client(id uint) *AppClientBuilder {
return ab.ClientWithToken(id, "client"+fmt.Sprint(id))

View File

@ -100,12 +100,20 @@ func (s *DatabaseSuite) Test_Apps() {
userTwoExpected := []*model.Application{{ID: 5, Token: "app5", UserID: 2}}
assert.Equal(s.T(), userTwoExpected, s.db.GetApplicationsByUser(2))
newAppWithName := userBuilder.NewAppWithTokenAndName(7, "test-token", "app name")
newAppWithNameExpected := &model.Application{ID: 7, Token: "test-token", UserID: 1, Name: "app name"}
assert.Equal(s.T(), newAppWithNameExpected, newAppWithName)
userBuilder.AppWithTokenAndName(8, "test-token-2", "app name")
s.db.AssertAppExist(1)
s.db.AssertAppExist(2)
s.db.AssertAppNotExist(3)
s.db.AssertAppNotExist(4)
s.db.AssertAppExist(5)
s.db.AssertAppNotExist(6)
s.db.AssertAppExist(7)
s.db.AssertAppExist(8)
s.db.DeleteApplicationByID(2)