chat_nav_test.go 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. package handler
  2. import (
  3. "bytes"
  4. "log/slog"
  5. "testing"
  6. "github.com/mk6i/retro-aim-server/wire"
  7. "github.com/stretchr/testify/assert"
  8. "github.com/stretchr/testify/mock"
  9. )
  10. func TestChatNavHandler_CreateRoom(t *testing.T) {
  11. input := wire.SNACMessage{
  12. Frame: wire.SNACFrame{
  13. FoodGroup: wire.ChatNav,
  14. SubGroup: wire.ChatNavCreateRoom,
  15. },
  16. Body: wire.SNAC_0x0E_0x02_ChatRoomInfoUpdate{
  17. Exchange: 1,
  18. },
  19. }
  20. output := wire.SNACMessage{
  21. Frame: wire.SNACFrame{
  22. FoodGroup: wire.ChatNav,
  23. SubGroup: wire.ChatNavNavInfo,
  24. },
  25. Body: wire.SNAC_0x0D_0x09_ChatNavNavInfo{},
  26. }
  27. svc := newMockChatNavService(t)
  28. svc.EXPECT().
  29. CreateRoom(mock.Anything, mock.Anything, input.Frame, input.Body).
  30. Return(output, nil)
  31. h := NewChatNavHandler(svc, slog.Default())
  32. ss := newMockResponseWriter(t)
  33. ss.EXPECT().
  34. SendSNAC(output.Frame, output.Body).
  35. Return(nil)
  36. buf := &bytes.Buffer{}
  37. assert.NoError(t, wire.Marshal(input.Body, buf))
  38. assert.NoError(t, h.CreateRoom(nil, nil, input.Frame, buf, ss))
  39. }
  40. func TestChatNavHandler_CreateRoom_ReadErr(t *testing.T) {
  41. input := wire.SNACMessage{
  42. Frame: wire.SNACFrame{
  43. FoodGroup: wire.ChatNav,
  44. SubGroup: wire.ChatNavCreateRoom,
  45. },
  46. Body: wire.SNAC_0x0E_0x02_ChatRoomInfoUpdate{
  47. Exchange: 1,
  48. },
  49. }
  50. output := wire.SNACMessage{
  51. Frame: wire.SNACFrame{
  52. FoodGroup: wire.ChatNav,
  53. SubGroup: wire.ChatNavNavInfo,
  54. },
  55. Body: wire.SNAC_0x0D_0x09_ChatNavNavInfo{},
  56. }
  57. svc := newMockChatNavService(t)
  58. svc.EXPECT().
  59. CreateRoom(mock.Anything, mock.Anything, input.Frame, input.Body).
  60. Return(output, nil)
  61. h := NewChatNavHandler(svc, slog.Default())
  62. ss := newMockResponseWriter(t)
  63. ss.EXPECT().
  64. SendSNAC(output.Frame, output.Body).
  65. Return(nil)
  66. buf := &bytes.Buffer{}
  67. assert.NoError(t, wire.Marshal(input.Body, buf))
  68. assert.NoError(t, h.CreateRoom(nil, nil, input.Frame, buf, ss))
  69. }
  70. func TestChatNavHandler_RequestChatRights(t *testing.T) {
  71. input := wire.SNACMessage{
  72. Frame: wire.SNACFrame{
  73. FoodGroup: wire.ChatNav,
  74. SubGroup: wire.ChatNavRequestChatRights,
  75. },
  76. Body: struct{}{},
  77. }
  78. output := wire.SNACMessage{
  79. Frame: wire.SNACFrame{
  80. FoodGroup: wire.ChatNav,
  81. SubGroup: wire.ChatNavNavInfo,
  82. },
  83. Body: wire.SNAC_0x0D_0x09_ChatNavNavInfo{},
  84. }
  85. svc := newMockChatNavService(t)
  86. svc.EXPECT().
  87. RequestChatRights(mock.Anything, input.Frame).
  88. Return(output)
  89. h := NewChatNavHandler(svc, slog.Default())
  90. ss := newMockResponseWriter(t)
  91. ss.EXPECT().
  92. SendSNAC(output.Frame, output.Body).
  93. Return(nil)
  94. buf := &bytes.Buffer{}
  95. assert.NoError(t, wire.Marshal(input.Body, buf))
  96. assert.NoError(t, h.RequestChatRights(nil, nil, input.Frame, buf, ss))
  97. }
  98. func TestChatNavHandler_RequestRoomInfo(t *testing.T) {
  99. input := wire.SNACMessage{
  100. Frame: wire.SNACFrame{
  101. FoodGroup: wire.ChatNav,
  102. SubGroup: wire.ChatNavRequestRoomInfo,
  103. },
  104. Body: wire.SNAC_0x0D_0x04_ChatNavRequestRoomInfo{
  105. Exchange: 1,
  106. },
  107. }
  108. output := wire.SNACMessage{
  109. Frame: wire.SNACFrame{
  110. FoodGroup: wire.ChatNav,
  111. SubGroup: wire.ChatNavNavInfo,
  112. },
  113. Body: wire.SNAC_0x0D_0x09_ChatNavNavInfo{},
  114. }
  115. svc := newMockChatNavService(t)
  116. svc.EXPECT().
  117. RequestRoomInfo(mock.Anything, input.Frame, input.Body).
  118. Return(output, nil)
  119. h := NewChatNavHandler(svc, slog.Default())
  120. ss := newMockResponseWriter(t)
  121. ss.EXPECT().
  122. SendSNAC(output.Frame, output.Body).
  123. Return(nil)
  124. buf := &bytes.Buffer{}
  125. assert.NoError(t, wire.Marshal(input.Body, buf))
  126. assert.NoError(t, h.RequestRoomInfo(nil, nil, input.Frame, buf, ss))
  127. }