You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

IrcMessageTest.kt 3.4KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. package com.dmdirc.ktirc.model
  2. import com.dmdirc.ktirc.TestConstants
  3. import com.dmdirc.ktirc.util.currentTimeProvider
  4. import com.dmdirc.ktirc.util.currentTimeZoneProvider
  5. import org.junit.jupiter.api.Assertions.assertEquals
  6. import org.junit.jupiter.api.Assertions.assertNull
  7. import org.junit.jupiter.api.Test
  8. import java.time.LocalDateTime
  9. import java.time.ZoneId
  10. internal class IrcMessageTest {
  11. @Test
  12. fun `gets UTC time from ServerTime tag if present`() {
  13. currentTimeZoneProvider = { ZoneId.of("Z") }
  14. val message = IrcMessage(hashMapOf(MessageTag.ServerTime to "1995-09-15T09:00:00.0000Z"), null, "", emptyList())
  15. assertEquals(LocalDateTime.parse("1995-09-15T09:00:00"), message.metadata.time)
  16. }
  17. @Test
  18. fun `converts time in ServerTime tag to local timezone`() {
  19. currentTimeZoneProvider = { ZoneId.of("America/New_York") }
  20. val message = IrcMessage(hashMapOf(MessageTag.ServerTime to "1995-09-15T09:00:00.0000Z"), null, "", emptyList())
  21. assertEquals(LocalDateTime.parse("1995-09-15T05:00:00"), message.metadata.time)
  22. }
  23. @Test
  24. fun `uses current time if ServerTime tag is malformed`() {
  25. currentTimeProvider = { TestConstants.time }
  26. val message = IrcMessage(hashMapOf(MessageTag.ServerTime to "1996-05-03T13:00:00.***Z"), null, "", emptyList())
  27. assertEquals(LocalDateTime.parse("1995-09-15T09:00:00"), message.metadata.time)
  28. }
  29. @Test
  30. fun `uses current local time if no tag present`() {
  31. currentTimeProvider = { TestConstants.time }
  32. val message = IrcMessage(emptyMap(), null, "", emptyList())
  33. assertEquals(LocalDateTime.parse("1995-09-15T09:00:00"), message.metadata.time)
  34. }
  35. @Test
  36. fun `populates batch field if present`() {
  37. currentTimeProvider = { TestConstants.time }
  38. val message = IrcMessage(hashMapOf(MessageTag.Batch to "abc123"), null, "", emptyList())
  39. assertEquals("abc123", message.metadata.batchId)
  40. }
  41. @Test
  42. fun `populates message id if present`() {
  43. currentTimeProvider = { TestConstants.time }
  44. val message = IrcMessage(hashMapOf(MessageTag.MessageId to "abc123"), null, "", emptyList())
  45. assertEquals("abc123", message.metadata.messageId)
  46. }
  47. @Test
  48. fun `populates label if present`() {
  49. currentTimeProvider = { TestConstants.time }
  50. val message = IrcMessage(hashMapOf(MessageTag.Label to "abc123"), null, "", emptyList())
  51. assertEquals("abc123", message.metadata.label)
  52. }
  53. @Test
  54. fun `Can parse the prefix as a source user`() {
  55. val message = IrcMessage(emptyMap(), "acidBurn!libby@root.localhost".toByteArray(), "", emptyList())
  56. val user = message.sourceUser!!
  57. assertEquals("acidBurn", user.nickname)
  58. assertEquals("libby", user.ident)
  59. assertEquals("root.localhost", user.hostname)
  60. assertNull(user.account)
  61. }
  62. @Test
  63. fun `uses account-name tag when creating a source user`() {
  64. val message = IrcMessage(hashMapOf(MessageTag.AccountName to "acidBurn"), "acidBurn!libby@root.localhost".toByteArray(), "", emptyList())
  65. val user = message.sourceUser!!
  66. assertEquals("acidBurn", user.nickname)
  67. assertEquals("libby", user.ident)
  68. assertEquals("root.localhost", user.hostname)
  69. assertEquals("acidBurn", user.account)
  70. }
  71. }