buddy_test.go 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  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 TestBuddyHandler_RightsQuery(t *testing.T) {
  11. input := wire.SNACMessage{
  12. Frame: wire.SNACFrame{
  13. FoodGroup: wire.Buddy,
  14. SubGroup: wire.BuddyRightsQuery,
  15. },
  16. Body: wire.SNAC_0x03_0x02_BuddyRightsQuery{
  17. TLVRestBlock: wire.TLVRestBlock{
  18. TLVList: wire.TLVList{
  19. wire.NewTLVBE(0x01, uint16(1000)),
  20. },
  21. },
  22. },
  23. }
  24. output := wire.SNACMessage{
  25. Frame: wire.SNACFrame{
  26. FoodGroup: wire.Buddy,
  27. SubGroup: wire.BuddyRightsReply,
  28. },
  29. Body: wire.SNAC_0x03_0x03_BuddyRightsReply{
  30. TLVRestBlock: wire.TLVRestBlock{
  31. TLVList: wire.TLVList{
  32. wire.NewTLVBE(0x01, uint16(1000)),
  33. },
  34. },
  35. },
  36. }
  37. svc := newMockBuddyService(t)
  38. svc.EXPECT().
  39. RightsQuery(mock.Anything, input.Frame).
  40. Return(output)
  41. h := NewBuddyHandler(slog.Default(), svc)
  42. responseWriter := newMockResponseWriter(t)
  43. responseWriter.EXPECT().
  44. SendSNAC(output.Frame, output.Body).
  45. Return(nil)
  46. buf := &bytes.Buffer{}
  47. assert.NoError(t, wire.MarshalBE(input.Body, buf))
  48. assert.NoError(t, h.RightsQuery(nil, nil, input.Frame, buf, responseWriter))
  49. }
  50. func TestBuddyHandler_AddBuddies(t *testing.T) {
  51. input := wire.SNACMessage{
  52. Frame: wire.SNACFrame{
  53. FoodGroup: wire.Buddy,
  54. SubGroup: wire.BuddyAddBuddies,
  55. },
  56. Body: wire.SNAC_0x03_0x04_BuddyAddBuddies{
  57. Buddies: []struct {
  58. ScreenName string `oscar:"len_prefix=uint8"`
  59. }{
  60. {
  61. ScreenName: "user1",
  62. },
  63. },
  64. },
  65. }
  66. svc := newMockBuddyService(t)
  67. svc.EXPECT().
  68. AddBuddies(mock.Anything, mock.Anything, input.Body).
  69. Return(nil)
  70. h := NewBuddyHandler(slog.Default(), svc)
  71. responseWriter := newMockResponseWriter(t)
  72. buf := &bytes.Buffer{}
  73. assert.NoError(t, wire.MarshalBE(input.Body, buf))
  74. assert.NoError(t, h.AddBuddies(nil, nil, input.Frame, buf, responseWriter))
  75. }
  76. func TestBuddyHandler_DelBuddies(t *testing.T) {
  77. input := wire.SNACMessage{
  78. Frame: wire.SNACFrame{
  79. FoodGroup: wire.Buddy,
  80. SubGroup: wire.BuddyDelBuddies,
  81. },
  82. Body: wire.SNAC_0x03_0x05_BuddyDelBuddies{
  83. Buddies: []struct {
  84. ScreenName string `oscar:"len_prefix=uint8"`
  85. }{
  86. {
  87. ScreenName: "user1",
  88. },
  89. },
  90. },
  91. }
  92. svc := newMockBuddyService(t)
  93. svc.EXPECT().
  94. DelBuddies(mock.Anything, mock.Anything, input.Body).
  95. Return(nil)
  96. h := NewBuddyHandler(slog.Default(), svc)
  97. responseWriter := newMockResponseWriter(t)
  98. buf := &bytes.Buffer{}
  99. assert.NoError(t, wire.MarshalBE(input.Body, buf))
  100. assert.NoError(t, h.DelBuddies(nil, nil, input.Frame, buf, responseWriter))
  101. }