+ ConfigDir: "/fakeConfigRoot",
+ Config: &Config{},
+ },
+ },
+ t: NewTransaction(
+ TranOldPostNews, [2]byte{0, 1},
+ NewField(FieldData, []byte("hai")),
+ ),
+ },
+ wantRes: []Transaction{
+ {
+ IsReply: 0x01,
+ },
+ },
+ },
+ }
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ gotRes := HandleTranOldPostNews(tt.args.cc, &tt.args.t)
+
+ tranAssertEqual(t, tt.wantRes, gotRes)
+ })
+ }
+}
+
+func TestHandleInviteNewChat(t *testing.T) {
+ type args struct {
+ cc *ClientConn
+ t Transaction
+ }
+ tests := []struct {
+ name string
+ args args
+ wantRes []Transaction
+ }{
+ {
+ name: "when user does not have required permission",
+ args: args{
+ cc: &ClientConn{
+ Account: &Account{
+ Access: func() accessBitmap {
+ var bits accessBitmap
+ return bits
+ }(),
+ },
+ },
+ t: NewTransaction(TranInviteNewChat, [2]byte{0, 1}),
+ },
+ wantRes: []Transaction{
+ {
+ IsReply: 0x01,
+ ErrorCode: [4]byte{0, 0, 0, 1},
+ Fields: []Field{
+ NewField(FieldError, []byte("You are not allowed to request private chat.")),
+ },
+ },
+ },
+ },
+ {
+ name: "when userA invites userB to new private chat",
+ args: args{
+ cc: &ClientConn{
+ ID: [2]byte{0, 1},
+ Account: &Account{
+ Access: func() accessBitmap {
+ var bits accessBitmap
+ bits.Set(accessOpenChat)
+ return bits
+ }(),
+ },
+ UserName: []byte("UserA"),
+ Icon: []byte{0, 1},
+ Flags: [2]byte{0, 0},
+ Server: &Server{
+ Clients: map[[2]byte]*ClientConn{
+ [2]byte{0, 2}: {
+ ID: [2]byte{0, 2},
+ UserName: []byte("UserB"),
+ },
+ },
+ PrivateChats: make(map[[4]byte]*PrivateChat),
+ },
+ },
+ t: NewTransaction(
+ TranInviteNewChat, [2]byte{0, 1},
+ NewField(FieldUserID, []byte{0, 2}),
+ ),
+ },
+ wantRes: []Transaction{
+ {
+ clientID: [2]byte{0, 2},
+ Type: [2]byte{0, 0x71},
+ Fields: []Field{
+ NewField(FieldChatID, []byte{0x52, 0xfd, 0xfc, 0x07}),
+ NewField(FieldUserName, []byte("UserA")),
+ NewField(FieldUserID, []byte{0, 1}),
+ },
+ },
+
+ {
+ clientID: [2]byte{0, 1},
+ IsReply: 0x01,
+ Fields: []Field{
+ NewField(FieldChatID, []byte{0x52, 0xfd, 0xfc, 0x07}),
+ NewField(FieldUserName, []byte("UserA")),
+ NewField(FieldUserID, []byte{0, 1}),
+ NewField(FieldUserIconID, []byte{0, 1}),
+ NewField(FieldUserFlags, []byte{0, 0}),
+ },
+ },
+ },
+ },
+ {
+ name: "when userA invites userB to new private chat, but UserB has refuse private chat enabled",
+ args: args{
+ cc: &ClientConn{
+ ID: [2]byte{0, 1},
+ Account: &Account{
+ Access: func() accessBitmap {
+ var bits accessBitmap
+ bits.Set(accessOpenChat)
+ return bits
+ }(),
+ },
+ UserName: []byte("UserA"),
+ Icon: []byte{0, 1},
+ Flags: [2]byte{0, 0},
+ Server: &Server{
+ Clients: map[[2]byte]*ClientConn{
+ [2]byte{0, 2}: {
+ ID: [2]byte{0, 2},
+ UserName: []byte("UserB"),
+ Flags: [2]byte{255, 255},
+ },
+ },
+ PrivateChats: make(map[[4]byte]*PrivateChat),