github.com/fretkak/mattermost-mattermost-server@v5.11.1+incompatible/app/notification_email_test.go (about) 1 // Copyright (c) 2016-present Mattermost, Inc. All Rights Reserved. 2 // See License.txt for license information. 3 4 package app 5 6 import ( 7 "fmt" 8 "regexp" 9 "strings" 10 "testing" 11 "time" 12 13 "github.com/mattermost/mattermost-server/model" 14 "github.com/mattermost/mattermost-server/services/timezones" 15 "github.com/mattermost/mattermost-server/utils" 16 ) 17 18 func TestGetDirectMessageNotificationEmailSubject(t *testing.T) { 19 th := Setup(t) 20 defer th.TearDown() 21 22 expectedPrefix := "[http://localhost:8065] New Direct Message from @sender on" 23 user := &model.User{} 24 post := &model.Post{ 25 CreateAt: 1501804801000, 26 } 27 translateFunc := utils.GetUserTranslations("en") 28 subject := getDirectMessageNotificationEmailSubject(user, post, translateFunc, "http://localhost:8065", "sender", true) 29 if !strings.HasPrefix(subject, expectedPrefix) { 30 t.Fatal("Expected subject line prefix '" + expectedPrefix + "', got " + subject) 31 } 32 } 33 34 func TestGetGroupMessageNotificationEmailSubjectFull(t *testing.T) { 35 th := Setup(t) 36 defer th.TearDown() 37 38 expectedPrefix := "[http://localhost:8065] New Group Message in sender on" 39 user := &model.User{} 40 post := &model.Post{ 41 CreateAt: 1501804801000, 42 } 43 translateFunc := utils.GetUserTranslations("en") 44 emailNotificationContentsType := model.EMAIL_NOTIFICATION_CONTENTS_FULL 45 subject := getGroupMessageNotificationEmailSubject(user, post, translateFunc, "http://localhost:8065", "sender", emailNotificationContentsType, true) 46 if !strings.HasPrefix(subject, expectedPrefix) { 47 t.Fatal("Expected subject line prefix '" + expectedPrefix + "', got " + subject) 48 } 49 } 50 51 func TestGetGroupMessageNotificationEmailSubjectGeneric(t *testing.T) { 52 th := Setup(t) 53 defer th.TearDown() 54 55 expectedPrefix := "[http://localhost:8065] New Group Message on" 56 user := &model.User{} 57 post := &model.Post{ 58 CreateAt: 1501804801000, 59 } 60 translateFunc := utils.GetUserTranslations("en") 61 emailNotificationContentsType := model.EMAIL_NOTIFICATION_CONTENTS_GENERIC 62 subject := getGroupMessageNotificationEmailSubject(user, post, translateFunc, "http://localhost:8065", "sender", emailNotificationContentsType, true) 63 if !strings.HasPrefix(subject, expectedPrefix) { 64 t.Fatal("Expected subject line prefix '" + expectedPrefix + "', got " + subject) 65 } 66 } 67 68 func TestGetNotificationEmailSubject(t *testing.T) { 69 th := Setup(t) 70 defer th.TearDown() 71 72 expectedPrefix := "[http://localhost:8065] Notification in team on" 73 user := &model.User{} 74 post := &model.Post{ 75 CreateAt: 1501804801000, 76 } 77 translateFunc := utils.GetUserTranslations("en") 78 subject := getNotificationEmailSubject(user, post, translateFunc, "http://localhost:8065", "team", true) 79 if !strings.HasPrefix(subject, expectedPrefix) { 80 t.Fatal("Expected subject line prefix '" + expectedPrefix + "', got " + subject) 81 } 82 } 83 84 func TestGetNotificationEmailBodyFullNotificationPublicChannel(t *testing.T) { 85 th := Setup(t) 86 defer th.TearDown() 87 88 recipient := &model.User{} 89 post := &model.Post{ 90 Message: "This is the message", 91 } 92 channel := &model.Channel{ 93 DisplayName: "ChannelName", 94 Type: model.CHANNEL_OPEN, 95 } 96 channelName := "ChannelName" 97 senderName := "sender" 98 teamName := "team" 99 teamURL := "http://localhost:8065/" + teamName 100 emailNotificationContentsType := model.EMAIL_NOTIFICATION_CONTENTS_FULL 101 translateFunc := utils.GetUserTranslations("en") 102 103 body := th.App.getNotificationEmailBody(recipient, post, channel, channelName, senderName, teamName, teamURL, emailNotificationContentsType, true, translateFunc) 104 if !strings.Contains(body, "You have a new notification.") { 105 t.Fatal("Expected email text 'You have a new notification. Got " + body) 106 } 107 if !strings.Contains(body, "Channel: "+channel.DisplayName) { 108 t.Fatal("Expected email text 'Channel: " + channel.DisplayName + "'. Got " + body) 109 } 110 if !strings.Contains(body, "@"+senderName+" - ") { 111 t.Fatal("Expected email text '@" + senderName + " - '. Got " + body) 112 } 113 if !strings.Contains(body, post.Message) { 114 t.Fatal("Expected email text '" + post.Message + "'. Got " + body) 115 } 116 if !strings.Contains(body, teamURL) { 117 t.Fatal("Expected email text '" + teamURL + "'. Got " + body) 118 } 119 } 120 121 func TestGetNotificationEmailBodyFullNotificationGroupChannel(t *testing.T) { 122 th := Setup(t) 123 defer th.TearDown() 124 125 recipient := &model.User{} 126 post := &model.Post{ 127 Message: "This is the message", 128 } 129 channel := &model.Channel{ 130 DisplayName: "ChannelName", 131 Type: model.CHANNEL_GROUP, 132 } 133 channelName := "ChannelName" 134 senderName := "sender" 135 teamName := "team" 136 teamURL := "http://localhost:8065/" + teamName 137 emailNotificationContentsType := model.EMAIL_NOTIFICATION_CONTENTS_FULL 138 translateFunc := utils.GetUserTranslations("en") 139 140 body := th.App.getNotificationEmailBody(recipient, post, channel, channelName, senderName, teamName, teamURL, emailNotificationContentsType, true, translateFunc) 141 if !strings.Contains(body, "You have a new Group Message.") { 142 t.Fatal("Expected email text 'You have a new Group Message. Got " + body) 143 } 144 if !strings.Contains(body, "Channel: ChannelName") { 145 t.Fatal("Expected email text 'Channel: ChannelName'. Got " + body) 146 } 147 if !strings.Contains(body, "@"+senderName+" - ") { 148 t.Fatal("Expected email text '@" + senderName + " - '. Got " + body) 149 } 150 if !strings.Contains(body, post.Message) { 151 t.Fatal("Expected email text '" + post.Message + "'. Got " + body) 152 } 153 if !strings.Contains(body, teamURL) { 154 t.Fatal("Expected email text '" + teamURL + "'. Got " + body) 155 } 156 } 157 158 func TestGetNotificationEmailBodyFullNotificationPrivateChannel(t *testing.T) { 159 th := Setup(t) 160 defer th.TearDown() 161 162 recipient := &model.User{} 163 post := &model.Post{ 164 Message: "This is the message", 165 } 166 channel := &model.Channel{ 167 DisplayName: "ChannelName", 168 Type: model.CHANNEL_PRIVATE, 169 } 170 channelName := "ChannelName" 171 senderName := "sender" 172 teamName := "team" 173 teamURL := "http://localhost:8065/" + teamName 174 emailNotificationContentsType := model.EMAIL_NOTIFICATION_CONTENTS_FULL 175 translateFunc := utils.GetUserTranslations("en") 176 177 body := th.App.getNotificationEmailBody(recipient, post, channel, channelName, senderName, teamName, teamURL, emailNotificationContentsType, true, translateFunc) 178 if !strings.Contains(body, "You have a new notification.") { 179 t.Fatal("Expected email text 'You have a new notification. Got " + body) 180 } 181 if !strings.Contains(body, "Channel: "+channel.DisplayName) { 182 t.Fatal("Expected email text 'Channel: " + channel.DisplayName + "'. Got " + body) 183 } 184 if !strings.Contains(body, "@"+senderName+" - ") { 185 t.Fatal("Expected email text '@" + senderName + " - '. Got " + body) 186 } 187 if !strings.Contains(body, post.Message) { 188 t.Fatal("Expected email text '" + post.Message + "'. Got " + body) 189 } 190 if !strings.Contains(body, teamURL) { 191 t.Fatal("Expected email text '" + teamURL + "'. Got " + body) 192 } 193 } 194 195 func TestGetNotificationEmailBodyFullNotificationDirectChannel(t *testing.T) { 196 th := Setup(t) 197 defer th.TearDown() 198 199 recipient := &model.User{} 200 post := &model.Post{ 201 Message: "This is the message", 202 } 203 channel := &model.Channel{ 204 DisplayName: "ChannelName", 205 Type: model.CHANNEL_DIRECT, 206 } 207 channelName := "ChannelName" 208 senderName := "sender" 209 teamName := "team" 210 teamURL := "http://localhost:8065/" + teamName 211 emailNotificationContentsType := model.EMAIL_NOTIFICATION_CONTENTS_FULL 212 translateFunc := utils.GetUserTranslations("en") 213 214 body := th.App.getNotificationEmailBody(recipient, post, channel, channelName, senderName, teamName, teamURL, emailNotificationContentsType, true, translateFunc) 215 if !strings.Contains(body, "You have a new Direct Message.") { 216 t.Fatal("Expected email text 'You have a new Direct Message. Got " + body) 217 } 218 if !strings.Contains(body, "@"+senderName+" - ") { 219 t.Fatal("Expected email text '@" + senderName + " - '. Got " + body) 220 } 221 if !strings.Contains(body, post.Message) { 222 t.Fatal("Expected email text '" + post.Message + "'. Got " + body) 223 } 224 if !strings.Contains(body, teamURL) { 225 t.Fatal("Expected email text '" + teamURL + "'. Got " + body) 226 } 227 } 228 229 func TestGetNotificationEmailBodyFullNotificationLocaleTimeWithTimezone(t *testing.T) { 230 th := Setup(t) 231 defer th.TearDown() 232 233 recipient := &model.User{ 234 Timezone: timezones.DefaultUserTimezone(), 235 } 236 recipient.Timezone["automaticTimezone"] = "America/New_York" 237 post := &model.Post{ 238 CreateAt: 1524663790000, 239 Message: "This is the message", 240 } 241 channel := &model.Channel{ 242 DisplayName: "ChannelName", 243 Type: model.CHANNEL_DIRECT, 244 } 245 channelName := "ChannelName" 246 senderName := "sender" 247 teamName := "team" 248 teamURL := "http://localhost:8065/" + teamName 249 emailNotificationContentsType := model.EMAIL_NOTIFICATION_CONTENTS_FULL 250 translateFunc := utils.GetUserTranslations("en") 251 252 body := th.App.getNotificationEmailBody(recipient, post, channel, channelName, senderName, teamName, teamURL, emailNotificationContentsType, false, translateFunc) 253 r, _ := regexp.Compile("E([S|D]+)T") 254 zone := r.FindString(body) 255 if !strings.Contains(body, "sender - 9:43 AM "+zone+", April 25") { 256 t.Fatal("Expected email text 'sender - 9:43 AM " + zone + ", April 25'. Got " + body) 257 } 258 } 259 260 func TestGetNotificationEmailBodyFullNotificationLocaleTimeNoTimezone(t *testing.T) { 261 th := Setup(t) 262 defer th.TearDown() 263 264 recipient := &model.User{ 265 Timezone: timezones.DefaultUserTimezone(), 266 } 267 post := &model.Post{ 268 CreateAt: 1524681000000, 269 Message: "This is the message", 270 } 271 channel := &model.Channel{ 272 DisplayName: "ChannelName", 273 Type: model.CHANNEL_DIRECT, 274 } 275 channelName := "ChannelName" 276 senderName := "sender" 277 teamName := "team" 278 teamURL := "http://localhost:8065/" + teamName 279 emailNotificationContentsType := model.EMAIL_NOTIFICATION_CONTENTS_FULL 280 translateFunc := utils.GetUserTranslations("en") 281 282 tm := time.Unix(post.CreateAt/1000, 0) 283 zone, _ := tm.Zone() 284 285 formattedTime := formattedPostTime{ 286 Time: tm, 287 Year: fmt.Sprintf("%d", tm.Year()), 288 Month: translateFunc(tm.Month().String()), 289 Day: fmt.Sprintf("%d", tm.Day()), 290 Hour: fmt.Sprintf("%02d", tm.Hour()), 291 Minute: fmt.Sprintf("%02d", tm.Minute()), 292 TimeZone: zone, 293 } 294 295 body := th.App.getNotificationEmailBody(recipient, post, channel, channelName, senderName, teamName, teamURL, emailNotificationContentsType, true, translateFunc) 296 postTimeLine := fmt.Sprintf("sender - %s:%s %s, %s %s", formattedTime.Hour, formattedTime.Minute, formattedTime.TimeZone, formattedTime.Month, formattedTime.Day) 297 if !strings.Contains(body, postTimeLine) { 298 t.Fatal("Expected email text '" + postTimeLine + " '. Got " + body) 299 } 300 } 301 302 func TestGetNotificationEmailBodyFullNotificationLocaleTime12Hour(t *testing.T) { 303 th := Setup(t) 304 defer th.TearDown() 305 306 recipient := &model.User{ 307 Timezone: timezones.DefaultUserTimezone(), 308 } 309 recipient.Timezone["automaticTimezone"] = "America/New_York" 310 post := &model.Post{ 311 CreateAt: 1524681000000, // 1524681000 // 1524681000000 312 Message: "This is the message", 313 } 314 channel := &model.Channel{ 315 DisplayName: "ChannelName", 316 Type: model.CHANNEL_DIRECT, 317 } 318 channelName := "ChannelName" 319 senderName := "sender" 320 teamName := "team" 321 teamURL := "http://localhost:8065/" + teamName 322 emailNotificationContentsType := model.EMAIL_NOTIFICATION_CONTENTS_FULL 323 translateFunc := utils.GetUserTranslations("en") 324 325 body := th.App.getNotificationEmailBody(recipient, post, channel, channelName, senderName, teamName, teamURL, emailNotificationContentsType, false, translateFunc) 326 if !strings.Contains(body, "sender - 2:30 PM") { 327 t.Fatal("Expected email text 'sender - 2:30 PM'. Got " + body) 328 } 329 if !strings.Contains(body, "April 25") { 330 t.Fatal("Expected email text 'April 25'. Got " + body) 331 } 332 } 333 334 func TestGetNotificationEmailBodyFullNotificationLocaleTime24Hour(t *testing.T) { 335 th := Setup(t) 336 defer th.TearDown() 337 338 recipient := &model.User{ 339 Timezone: timezones.DefaultUserTimezone(), 340 } 341 recipient.Timezone["automaticTimezone"] = "America/New_York" 342 post := &model.Post{ 343 CreateAt: 1524681000000, 344 Message: "This is the message", 345 } 346 channel := &model.Channel{ 347 DisplayName: "ChannelName", 348 Type: model.CHANNEL_DIRECT, 349 } 350 channelName := "ChannelName" 351 senderName := "sender" 352 teamName := "team" 353 teamURL := "http://localhost:8065/" + teamName 354 emailNotificationContentsType := model.EMAIL_NOTIFICATION_CONTENTS_FULL 355 translateFunc := utils.GetUserTranslations("en") 356 357 body := th.App.getNotificationEmailBody(recipient, post, channel, channelName, senderName, teamName, teamURL, emailNotificationContentsType, true, translateFunc) 358 if !strings.Contains(body, "sender - 14:30") { 359 t.Fatal("Expected email text 'sender - 14:30'. Got " + body) 360 } 361 if !strings.Contains(body, "April 25") { 362 t.Fatal("Expected email text 'April 25'. Got " + body) 363 } 364 } 365 366 // from here 367 func TestGetNotificationEmailBodyGenericNotificationPublicChannel(t *testing.T) { 368 th := Setup(t) 369 defer th.TearDown() 370 371 recipient := &model.User{} 372 post := &model.Post{ 373 Message: "This is the message", 374 } 375 channel := &model.Channel{ 376 DisplayName: "ChannelName", 377 Type: model.CHANNEL_OPEN, 378 } 379 channelName := "ChannelName" 380 senderName := "sender" 381 teamName := "team" 382 teamURL := "http://localhost:8065/" + teamName 383 emailNotificationContentsType := model.EMAIL_NOTIFICATION_CONTENTS_GENERIC 384 translateFunc := utils.GetUserTranslations("en") 385 386 body := th.App.getNotificationEmailBody(recipient, post, channel, channelName, senderName, teamName, teamURL, emailNotificationContentsType, true, translateFunc) 387 if !strings.Contains(body, "You have a new notification from @"+senderName) { 388 t.Fatal("Expected email text 'You have a new notification from @" + senderName + "'. Got " + body) 389 } 390 if strings.Contains(body, "Channel: "+channel.DisplayName) { 391 t.Fatal("Did not expect email text 'Channel: " + channel.DisplayName + "'. Got " + body) 392 } 393 if strings.Contains(body, post.Message) { 394 t.Fatal("Did not expect email text '" + post.Message + "'. Got " + body) 395 } 396 if !strings.Contains(body, teamURL) { 397 t.Fatal("Expected email text '" + teamURL + "'. Got " + body) 398 } 399 } 400 401 func TestGetNotificationEmailBodyGenericNotificationGroupChannel(t *testing.T) { 402 th := Setup(t) 403 defer th.TearDown() 404 405 recipient := &model.User{} 406 post := &model.Post{ 407 Message: "This is the message", 408 } 409 channel := &model.Channel{ 410 DisplayName: "ChannelName", 411 Type: model.CHANNEL_GROUP, 412 } 413 channelName := "ChannelName" 414 senderName := "sender" 415 teamName := "team" 416 teamURL := "http://localhost:8065/" + teamName 417 emailNotificationContentsType := model.EMAIL_NOTIFICATION_CONTENTS_GENERIC 418 translateFunc := utils.GetUserTranslations("en") 419 420 body := th.App.getNotificationEmailBody(recipient, post, channel, channelName, senderName, teamName, teamURL, emailNotificationContentsType, true, translateFunc) 421 if !strings.Contains(body, "You have a new Group Message from @"+senderName) { 422 t.Fatal("Expected email text 'You have a new Group Message from @" + senderName + "'. Got " + body) 423 } 424 if strings.Contains(body, "CHANNEL: "+channel.DisplayName) { 425 t.Fatal("Did not expect email text 'CHANNEL: " + channel.DisplayName + "'. Got " + body) 426 } 427 if strings.Contains(body, post.Message) { 428 t.Fatal("Did not expect email text '" + post.Message + "'. Got " + body) 429 } 430 if !strings.Contains(body, teamURL) { 431 t.Fatal("Expected email text '" + teamURL + "'. Got " + body) 432 } 433 } 434 435 func TestGetNotificationEmailBodyGenericNotificationPrivateChannel(t *testing.T) { 436 th := Setup(t) 437 defer th.TearDown() 438 439 recipient := &model.User{} 440 post := &model.Post{ 441 Message: "This is the message", 442 } 443 channel := &model.Channel{ 444 DisplayName: "ChannelName", 445 Type: model.CHANNEL_PRIVATE, 446 } 447 channelName := "ChannelName" 448 senderName := "sender" 449 teamName := "team" 450 teamURL := "http://localhost:8065/" + teamName 451 emailNotificationContentsType := model.EMAIL_NOTIFICATION_CONTENTS_GENERIC 452 translateFunc := utils.GetUserTranslations("en") 453 454 body := th.App.getNotificationEmailBody(recipient, post, channel, channelName, senderName, teamName, teamURL, emailNotificationContentsType, true, translateFunc) 455 if !strings.Contains(body, "You have a new notification from @"+senderName) { 456 t.Fatal("Expected email text 'You have a new notification from @" + senderName + "'. Got " + body) 457 } 458 if strings.Contains(body, "CHANNEL: "+channel.DisplayName) { 459 t.Fatal("Did not expect email text 'CHANNEL: " + channel.DisplayName + "'. Got " + body) 460 } 461 if strings.Contains(body, post.Message) { 462 t.Fatal("Did not expect email text '" + post.Message + "'. Got " + body) 463 } 464 if !strings.Contains(body, teamURL) { 465 t.Fatal("Expected email text '" + teamURL + "'. Got " + body) 466 } 467 } 468 469 func TestGetNotificationEmailBodyGenericNotificationDirectChannel(t *testing.T) { 470 th := Setup(t) 471 defer th.TearDown() 472 473 recipient := &model.User{} 474 post := &model.Post{ 475 Message: "This is the message", 476 } 477 channel := &model.Channel{ 478 DisplayName: "ChannelName", 479 Type: model.CHANNEL_DIRECT, 480 } 481 channelName := "ChannelName" 482 senderName := "sender" 483 teamName := "team" 484 teamURL := "http://localhost:8065/" + teamName 485 emailNotificationContentsType := model.EMAIL_NOTIFICATION_CONTENTS_GENERIC 486 translateFunc := utils.GetUserTranslations("en") 487 488 body := th.App.getNotificationEmailBody(recipient, post, channel, channelName, senderName, teamName, teamURL, emailNotificationContentsType, true, translateFunc) 489 if !strings.Contains(body, "You have a new Direct Message from @"+senderName) { 490 t.Fatal("Expected email text 'You have a new Direct Message from @" + senderName + "'. Got " + body) 491 } 492 if strings.Contains(body, "CHANNEL: "+channel.DisplayName) { 493 t.Fatal("Did not expect email text 'CHANNEL: " + channel.DisplayName + "'. Got " + body) 494 } 495 if strings.Contains(body, post.Message) { 496 t.Fatal("Did not expect email text '" + post.Message + "'. Got " + body) 497 } 498 if !strings.Contains(body, teamURL) { 499 t.Fatal("Expected email text '" + teamURL + "'. Got " + body) 500 } 501 }