permit_deny_test.go 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667
  1. package foodgroup
  2. import (
  3. "context"
  4. "testing"
  5. "github.com/mk6i/open-oscar-server/state"
  6. "github.com/stretchr/testify/assert"
  7. "github.com/mk6i/open-oscar-server/wire"
  8. )
  9. func TestPermitDenyService_RightsQuery(t *testing.T) {
  10. svc := NewPermitDenyService(nil, nil, nil, nil, nil)
  11. have := svc.RightsQuery(context.TODO(), wire.SNACFrame{RequestID: 1234})
  12. want := wire.SNACMessage{
  13. Frame: wire.SNACFrame{
  14. FoodGroup: wire.PermitDeny,
  15. SubGroup: wire.PermitDenyRightsReply,
  16. RequestID: 1234,
  17. },
  18. Body: wire.SNAC_0x09_0x03_PermitDenyRightsReply{
  19. TLVRestBlock: wire.TLVRestBlock{
  20. TLVList: wire.TLVList{
  21. wire.NewTLVBE(wire.PermitDenyTLVMaxDenies, uint16(100)),
  22. wire.NewTLVBE(wire.PermitDenyTLVMaxPermits, uint16(100)),
  23. wire.NewTLVBE(wire.PermitDenyTLVMaxTempPermits, uint16(100)),
  24. },
  25. },
  26. },
  27. }
  28. assert.Equal(t, want, have)
  29. }
  30. func TestPermitDenyService_AddDenyListEntries(t *testing.T) {
  31. tests := []struct {
  32. // name is the name of the test
  33. name string
  34. // instance is the client session instance
  35. instance *state.SessionInstance
  36. // bodyIn is the input SNAC
  37. bodyIn wire.SNAC_0x09_0x07_PermitDenyAddDenyListEntries
  38. // expectOutput is the expected return SNAC value
  39. expectOutput *wire.SNACMessage
  40. // mockParams is the list of params sent to mocks that satisfy this
  41. // method's dependencies
  42. mockParams mockParams
  43. // wantErr is the expected error
  44. wantErr error
  45. }{
  46. {
  47. name: "set FeedbagPDModePermitAll",
  48. instance: newTestInstance("me", sessOptSignonComplete),
  49. bodyIn: wire.SNAC_0x09_0x07_PermitDenyAddDenyListEntries{
  50. Users: []struct {
  51. ScreenName string `oscar:"len_prefix=uint8"`
  52. }{
  53. {ScreenName: "me"},
  54. },
  55. },
  56. mockParams: mockParams{
  57. clientSideBuddyListManagerParams: clientSideBuddyListManagerParams{
  58. setPDModeParams: setPDModeParams{
  59. {
  60. userScreenName: state.NewIdentScreenName("me"),
  61. pdMode: wire.FeedbagPDModePermitAll,
  62. },
  63. },
  64. },
  65. buddyBroadcasterParams: buddyBroadcasterParams{
  66. broadcastVisibilityParams: broadcastVisibilityParams{
  67. {
  68. from: state.NewIdentScreenName("me"),
  69. filter: nil,
  70. },
  71. },
  72. },
  73. },
  74. },
  75. {
  76. name: "set FeedbagPDModeDenySome - 0 users",
  77. instance: newTestInstance("me", sessOptSignonComplete),
  78. bodyIn: wire.SNAC_0x09_0x07_PermitDenyAddDenyListEntries{},
  79. mockParams: mockParams{
  80. clientSideBuddyListManagerParams: clientSideBuddyListManagerParams{
  81. setPDModeParams: setPDModeParams{
  82. {
  83. userScreenName: state.NewIdentScreenName("me"),
  84. pdMode: wire.FeedbagPDModeDenySome,
  85. },
  86. },
  87. },
  88. buddyBroadcasterParams: buddyBroadcasterParams{
  89. broadcastVisibilityParams: broadcastVisibilityParams{
  90. {
  91. from: state.NewIdentScreenName("me"),
  92. filter: nil,
  93. },
  94. },
  95. },
  96. },
  97. },
  98. {
  99. name: "set FeedbagPDModeDenySome - 1 user",
  100. instance: newTestInstance("me", sessOptSignonComplete),
  101. bodyIn: wire.SNAC_0x09_0x07_PermitDenyAddDenyListEntries{
  102. Users: []struct {
  103. ScreenName string `oscar:"len_prefix=uint8"`
  104. }{
  105. {ScreenName: "them"},
  106. },
  107. },
  108. mockParams: mockParams{
  109. clientSideBuddyListManagerParams: clientSideBuddyListManagerParams{
  110. setPDModeParams: setPDModeParams{
  111. {
  112. userScreenName: state.NewIdentScreenName("me"),
  113. pdMode: wire.FeedbagPDModeDenySome,
  114. },
  115. },
  116. denyBuddyParams: denyBuddyParams{
  117. {
  118. me: state.NewIdentScreenName("me"),
  119. them: state.NewIdentScreenName("them"),
  120. },
  121. },
  122. },
  123. buddyBroadcasterParams: buddyBroadcasterParams{
  124. broadcastVisibilityParams: broadcastVisibilityParams{
  125. {
  126. from: state.NewIdentScreenName("me"),
  127. filter: nil,
  128. },
  129. },
  130. },
  131. },
  132. },
  133. {
  134. name: "set FeedbagPDModeDenySome sign on incomplete - 1 user",
  135. instance: newTestInstance("me"),
  136. bodyIn: wire.SNAC_0x09_0x07_PermitDenyAddDenyListEntries{
  137. Users: []struct {
  138. ScreenName string `oscar:"len_prefix=uint8"`
  139. }{
  140. {ScreenName: "them"},
  141. },
  142. },
  143. mockParams: mockParams{
  144. clientSideBuddyListManagerParams: clientSideBuddyListManagerParams{
  145. setPDModeParams: setPDModeParams{
  146. {
  147. userScreenName: state.NewIdentScreenName("me"),
  148. pdMode: wire.FeedbagPDModeDenySome,
  149. },
  150. },
  151. denyBuddyParams: denyBuddyParams{
  152. {
  153. me: state.NewIdentScreenName("me"),
  154. them: state.NewIdentScreenName("them"),
  155. },
  156. },
  157. },
  158. buddyBroadcasterParams: buddyBroadcasterParams{
  159. broadcastVisibilityParams: broadcastVisibilityParams{},
  160. },
  161. },
  162. },
  163. {
  164. name: "set FeedbagPDModeDenySome - 2 users",
  165. instance: newTestInstance("me", sessOptSignonComplete),
  166. bodyIn: wire.SNAC_0x09_0x07_PermitDenyAddDenyListEntries{
  167. Users: []struct {
  168. ScreenName string `oscar:"len_prefix=uint8"`
  169. }{
  170. {ScreenName: "them1"},
  171. {ScreenName: "them2"},
  172. },
  173. },
  174. mockParams: mockParams{
  175. clientSideBuddyListManagerParams: clientSideBuddyListManagerParams{
  176. setPDModeParams: setPDModeParams{
  177. {
  178. userScreenName: state.NewIdentScreenName("me"),
  179. pdMode: wire.FeedbagPDModeDenySome,
  180. },
  181. },
  182. denyBuddyParams: denyBuddyParams{
  183. {
  184. me: state.NewIdentScreenName("me"),
  185. them: state.NewIdentScreenName("them1"),
  186. },
  187. {
  188. me: state.NewIdentScreenName("me"),
  189. them: state.NewIdentScreenName("them2"),
  190. },
  191. },
  192. },
  193. buddyBroadcasterParams: buddyBroadcasterParams{
  194. broadcastVisibilityParams: broadcastVisibilityParams{
  195. {
  196. from: state.NewIdentScreenName("me"),
  197. filter: nil,
  198. },
  199. },
  200. },
  201. },
  202. },
  203. }
  204. for _, tt := range tests {
  205. t.Run(tt.name, func(t *testing.T) {
  206. clientSideBuddyListManager := newMockClientSideBuddyListManager(t)
  207. for _, item := range tt.mockParams.setPDModeParams {
  208. clientSideBuddyListManager.EXPECT().
  209. SetPDMode(matchContext(), item.userScreenName, item.pdMode).
  210. Return(item.err)
  211. }
  212. for _, item := range tt.mockParams.denyBuddyParams {
  213. clientSideBuddyListManager.EXPECT().
  214. DenyBuddy(matchContext(), item.me, item.them).
  215. Return(item.err)
  216. }
  217. mockBuddyBroadcaster := newMockbuddyBroadcaster(t)
  218. for _, item := range tt.mockParams.broadcastVisibilityParams {
  219. mockBuddyBroadcaster.EXPECT().
  220. BroadcastVisibility(context.TODO(), matchSession(item.from), item.filter, true).
  221. Return(item.err)
  222. }
  223. svc := PermitDenyService{
  224. buddyBroadcaster: mockBuddyBroadcaster,
  225. clientSideBuddyListManager: clientSideBuddyListManager,
  226. }
  227. err := svc.AddDenyListEntries(context.TODO(), tt.instance, tt.bodyIn)
  228. assert.Equal(t, tt.wantErr, err)
  229. })
  230. }
  231. }
  232. func TestPermitDenyService_AddPermListEntries(t *testing.T) {
  233. tests := []struct {
  234. // name is the name of the test
  235. name string
  236. // instance is the client session
  237. instance *state.SessionInstance
  238. // bodyIn is the input SNAC
  239. bodyIn wire.SNAC_0x09_0x05_PermitDenyAddPermListEntries
  240. // expectOutput is the expected return SNAC value
  241. expectOutput *wire.SNACMessage
  242. // mockParams is the list of params sent to mocks that satisfy this
  243. // method's dependencies
  244. mockParams mockParams
  245. // wantErr is the expected error
  246. wantErr error
  247. }{
  248. {
  249. name: "set FeedbagPDModeDenyAll",
  250. instance: newTestInstance("me", sessOptSignonComplete),
  251. bodyIn: wire.SNAC_0x09_0x05_PermitDenyAddPermListEntries{
  252. Users: []struct {
  253. ScreenName string `oscar:"len_prefix=uint8"`
  254. }{
  255. {ScreenName: "me"},
  256. },
  257. },
  258. mockParams: mockParams{
  259. clientSideBuddyListManagerParams: clientSideBuddyListManagerParams{
  260. setPDModeParams: setPDModeParams{
  261. {
  262. userScreenName: state.NewIdentScreenName("me"),
  263. pdMode: wire.FeedbagPDModeDenyAll,
  264. },
  265. },
  266. },
  267. buddyBroadcasterParams: buddyBroadcasterParams{
  268. broadcastVisibilityParams: broadcastVisibilityParams{
  269. {
  270. from: state.NewIdentScreenName("me"),
  271. filter: nil,
  272. },
  273. },
  274. },
  275. },
  276. },
  277. {
  278. name: "set FeedbagPDModePermitSome - 0 users",
  279. instance: newTestInstance("me", sessOptSignonComplete),
  280. bodyIn: wire.SNAC_0x09_0x05_PermitDenyAddPermListEntries{},
  281. mockParams: mockParams{
  282. clientSideBuddyListManagerParams: clientSideBuddyListManagerParams{
  283. setPDModeParams: setPDModeParams{
  284. {
  285. userScreenName: state.NewIdentScreenName("me"),
  286. pdMode: wire.FeedbagPDModePermitSome,
  287. },
  288. },
  289. },
  290. buddyBroadcasterParams: buddyBroadcasterParams{
  291. broadcastVisibilityParams: broadcastVisibilityParams{
  292. {
  293. from: state.NewIdentScreenName("me"),
  294. filter: nil,
  295. },
  296. },
  297. },
  298. },
  299. },
  300. {
  301. name: "set FeedbagPDModePermitSome - 1 user",
  302. instance: newTestInstance("me", sessOptSignonComplete),
  303. bodyIn: wire.SNAC_0x09_0x05_PermitDenyAddPermListEntries{
  304. Users: []struct {
  305. ScreenName string `oscar:"len_prefix=uint8"`
  306. }{
  307. {ScreenName: "them"},
  308. },
  309. },
  310. mockParams: mockParams{
  311. clientSideBuddyListManagerParams: clientSideBuddyListManagerParams{
  312. setPDModeParams: setPDModeParams{
  313. {
  314. userScreenName: state.NewIdentScreenName("me"),
  315. pdMode: wire.FeedbagPDModePermitSome,
  316. },
  317. },
  318. permitBuddyParams: permitBuddyParams{
  319. {
  320. me: state.NewIdentScreenName("me"),
  321. them: state.NewIdentScreenName("them"),
  322. },
  323. },
  324. },
  325. buddyBroadcasterParams: buddyBroadcasterParams{
  326. broadcastVisibilityParams: broadcastVisibilityParams{
  327. {
  328. from: state.NewIdentScreenName("me"),
  329. filter: nil,
  330. },
  331. },
  332. },
  333. },
  334. },
  335. {
  336. name: "set FeedbagPDModePermitSome sign on incomplete - 1 user",
  337. instance: newTestInstance("me"),
  338. bodyIn: wire.SNAC_0x09_0x05_PermitDenyAddPermListEntries{
  339. Users: []struct {
  340. ScreenName string `oscar:"len_prefix=uint8"`
  341. }{
  342. {ScreenName: "them"},
  343. },
  344. },
  345. mockParams: mockParams{
  346. clientSideBuddyListManagerParams: clientSideBuddyListManagerParams{
  347. setPDModeParams: setPDModeParams{
  348. {
  349. userScreenName: state.NewIdentScreenName("me"),
  350. pdMode: wire.FeedbagPDModePermitSome,
  351. },
  352. },
  353. permitBuddyParams: permitBuddyParams{
  354. {
  355. me: state.NewIdentScreenName("me"),
  356. them: state.NewIdentScreenName("them"),
  357. },
  358. },
  359. },
  360. buddyBroadcasterParams: buddyBroadcasterParams{
  361. broadcastVisibilityParams: broadcastVisibilityParams{},
  362. },
  363. },
  364. },
  365. {
  366. name: "set FeedbagPDModePermitSome - 2 users",
  367. instance: newTestInstance("me", sessOptSignonComplete),
  368. bodyIn: wire.SNAC_0x09_0x05_PermitDenyAddPermListEntries{
  369. Users: []struct {
  370. ScreenName string `oscar:"len_prefix=uint8"`
  371. }{
  372. {ScreenName: "them1"},
  373. {ScreenName: "them2"},
  374. },
  375. },
  376. mockParams: mockParams{
  377. clientSideBuddyListManagerParams: clientSideBuddyListManagerParams{
  378. setPDModeParams: setPDModeParams{
  379. {
  380. userScreenName: state.NewIdentScreenName("me"),
  381. pdMode: wire.FeedbagPDModePermitSome,
  382. },
  383. },
  384. permitBuddyParams: permitBuddyParams{
  385. {
  386. me: state.NewIdentScreenName("me"),
  387. them: state.NewIdentScreenName("them1"),
  388. },
  389. {
  390. me: state.NewIdentScreenName("me"),
  391. them: state.NewIdentScreenName("them2"),
  392. },
  393. },
  394. },
  395. buddyBroadcasterParams: buddyBroadcasterParams{
  396. broadcastVisibilityParams: broadcastVisibilityParams{
  397. {
  398. from: state.NewIdentScreenName("me"),
  399. filter: nil,
  400. },
  401. },
  402. },
  403. },
  404. },
  405. }
  406. for _, tt := range tests {
  407. t.Run(tt.name, func(t *testing.T) {
  408. clientSideBuddyListManager := newMockClientSideBuddyListManager(t)
  409. for _, item := range tt.mockParams.setPDModeParams {
  410. clientSideBuddyListManager.EXPECT().
  411. SetPDMode(matchContext(), item.userScreenName, item.pdMode).
  412. Return(item.err)
  413. }
  414. for _, item := range tt.mockParams.permitBuddyParams {
  415. clientSideBuddyListManager.EXPECT().
  416. PermitBuddy(matchContext(), item.me, item.them).
  417. Return(item.err)
  418. }
  419. mockBuddyBroadcaster := newMockbuddyBroadcaster(t)
  420. for _, item := range tt.mockParams.broadcastVisibilityParams {
  421. mockBuddyBroadcaster.EXPECT().
  422. BroadcastVisibility(context.TODO(), matchSession(item.from), item.filter, true).
  423. Return(item.err)
  424. }
  425. svc := PermitDenyService{
  426. buddyBroadcaster: mockBuddyBroadcaster,
  427. clientSideBuddyListManager: clientSideBuddyListManager,
  428. }
  429. err := svc.AddPermListEntries(context.TODO(), tt.instance, tt.bodyIn)
  430. assert.Equal(t, tt.wantErr, err)
  431. })
  432. }
  433. }
  434. func TestPermitDenyService_DelDenyListEntries(t *testing.T) {
  435. tests := []struct {
  436. // name is the name of the test
  437. name string
  438. // instance is the client session
  439. instance *state.SessionInstance
  440. // bodyIn is the input SNAC
  441. bodyIn wire.SNAC_0x09_0x08_PermitDenyDelDenyListEntries
  442. // expectOutput is the expected return SNAC value
  443. expectOutput *wire.SNACMessage
  444. // mockParams is the list of params sent to mocks that satisfy this
  445. // method's dependencies
  446. mockParams mockParams
  447. // wantErr is the expected error
  448. wantErr error
  449. }{
  450. {
  451. name: "remove 0 deny list entries",
  452. instance: newTestInstance("me", sessOptSignonComplete),
  453. bodyIn: wire.SNAC_0x09_0x08_PermitDenyDelDenyListEntries{
  454. Users: []struct {
  455. ScreenName string `oscar:"len_prefix=uint8"`
  456. }{},
  457. },
  458. },
  459. {
  460. name: "sign on incomplete remove 1 deny list entries",
  461. instance: newTestInstance("me"),
  462. bodyIn: wire.SNAC_0x09_0x08_PermitDenyDelDenyListEntries{
  463. Users: []struct {
  464. ScreenName string `oscar:"len_prefix=uint8"`
  465. }{
  466. {ScreenName: "them1"},
  467. },
  468. },
  469. mockParams: mockParams{
  470. clientSideBuddyListManagerParams: clientSideBuddyListManagerParams{
  471. removeDenyBuddyParams: removeDenyBuddyParams{
  472. {
  473. me: state.NewIdentScreenName("me"),
  474. them: state.NewIdentScreenName("them1"),
  475. },
  476. },
  477. },
  478. buddyBroadcasterParams: buddyBroadcasterParams{
  479. broadcastVisibilityParams: broadcastVisibilityParams{},
  480. },
  481. },
  482. },
  483. {
  484. name: "remove 2 deny list entries",
  485. instance: newTestInstance("me", sessOptSignonComplete),
  486. bodyIn: wire.SNAC_0x09_0x08_PermitDenyDelDenyListEntries{
  487. Users: []struct {
  488. ScreenName string `oscar:"len_prefix=uint8"`
  489. }{
  490. {ScreenName: "them1"},
  491. {ScreenName: "them2"},
  492. },
  493. },
  494. mockParams: mockParams{
  495. clientSideBuddyListManagerParams: clientSideBuddyListManagerParams{
  496. removeDenyBuddyParams: removeDenyBuddyParams{
  497. {
  498. me: state.NewIdentScreenName("me"),
  499. them: state.NewIdentScreenName("them1"),
  500. },
  501. {
  502. me: state.NewIdentScreenName("me"),
  503. them: state.NewIdentScreenName("them2"),
  504. },
  505. },
  506. },
  507. buddyBroadcasterParams: buddyBroadcasterParams{
  508. broadcastVisibilityParams: broadcastVisibilityParams{
  509. {
  510. from: state.NewIdentScreenName("me"),
  511. filter: []state.IdentScreenName{
  512. state.NewIdentScreenName("them1"),
  513. state.NewIdentScreenName("them2"),
  514. },
  515. },
  516. },
  517. },
  518. },
  519. },
  520. }
  521. for _, tt := range tests {
  522. t.Run(tt.name, func(t *testing.T) {
  523. clientSideBuddyListManager := newMockClientSideBuddyListManager(t)
  524. for _, item := range tt.mockParams.removeDenyBuddyParams {
  525. clientSideBuddyListManager.EXPECT().
  526. RemoveDenyBuddy(matchContext(), item.me, item.them).
  527. Return(item.err)
  528. }
  529. mockBuddyBroadcaster := newMockbuddyBroadcaster(t)
  530. for _, item := range tt.mockParams.broadcastVisibilityParams {
  531. mockBuddyBroadcaster.EXPECT().
  532. BroadcastVisibility(context.TODO(), matchSession(item.from), item.filter, true).
  533. Return(item.err)
  534. }
  535. svc := PermitDenyService{
  536. buddyBroadcaster: mockBuddyBroadcaster,
  537. clientSideBuddyListManager: clientSideBuddyListManager,
  538. }
  539. err := svc.DelDenyListEntries(context.TODO(), tt.instance, tt.bodyIn)
  540. assert.Equal(t, tt.wantErr, err)
  541. })
  542. }
  543. }
  544. func TestPermitDenyService_DelPermListEntries(t *testing.T) {
  545. tests := []struct {
  546. // name is the name of the test
  547. name string
  548. // instance is the client session
  549. instance *state.SessionInstance
  550. // bodyIn is the input SNAC
  551. bodyIn wire.SNAC_0x09_0x06_PermitDenyDelPermListEntries
  552. // expectOutput is the expected return SNAC value
  553. expectOutput *wire.SNACMessage
  554. // mockParams is the list of params sent to mocks that satisfy this
  555. // method's dependencies
  556. mockParams mockParams
  557. // wantErr is the expected error
  558. wantErr error
  559. }{
  560. {
  561. name: "remove 0 deny list entries",
  562. instance: newTestInstance("me", sessOptSignonComplete),
  563. bodyIn: wire.SNAC_0x09_0x06_PermitDenyDelPermListEntries{
  564. Users: []struct {
  565. ScreenName string `oscar:"len_prefix=uint8"`
  566. }{},
  567. },
  568. },
  569. {
  570. name: "sign on incomplete remove 1 deny list entries",
  571. instance: newTestInstance("me"),
  572. bodyIn: wire.SNAC_0x09_0x06_PermitDenyDelPermListEntries{
  573. Users: []struct {
  574. ScreenName string `oscar:"len_prefix=uint8"`
  575. }{
  576. {ScreenName: "them1"},
  577. },
  578. },
  579. mockParams: mockParams{
  580. clientSideBuddyListManagerParams: clientSideBuddyListManagerParams{
  581. removePermitBuddyParams: removePermitBuddyParams{
  582. {
  583. me: state.NewIdentScreenName("me"),
  584. them: state.NewIdentScreenName("them1"),
  585. },
  586. },
  587. },
  588. buddyBroadcasterParams: buddyBroadcasterParams{
  589. broadcastVisibilityParams: broadcastVisibilityParams{},
  590. },
  591. },
  592. },
  593. {
  594. name: "remove 2 deny list entries",
  595. instance: newTestInstance("me", sessOptSignonComplete),
  596. bodyIn: wire.SNAC_0x09_0x06_PermitDenyDelPermListEntries{
  597. Users: []struct {
  598. ScreenName string `oscar:"len_prefix=uint8"`
  599. }{
  600. {ScreenName: "them1"},
  601. {ScreenName: "them2"},
  602. },
  603. },
  604. mockParams: mockParams{
  605. clientSideBuddyListManagerParams: clientSideBuddyListManagerParams{
  606. removePermitBuddyParams: removePermitBuddyParams{
  607. {
  608. me: state.NewIdentScreenName("me"),
  609. them: state.NewIdentScreenName("them1"),
  610. },
  611. {
  612. me: state.NewIdentScreenName("me"),
  613. them: state.NewIdentScreenName("them2"),
  614. },
  615. },
  616. },
  617. buddyBroadcasterParams: buddyBroadcasterParams{
  618. broadcastVisibilityParams: broadcastVisibilityParams{
  619. {
  620. from: state.NewIdentScreenName("me"),
  621. filter: []state.IdentScreenName{
  622. state.NewIdentScreenName("them1"),
  623. state.NewIdentScreenName("them2"),
  624. },
  625. },
  626. },
  627. },
  628. },
  629. },
  630. }
  631. for _, tt := range tests {
  632. t.Run(tt.name, func(t *testing.T) {
  633. clientSideBuddyListManager := newMockClientSideBuddyListManager(t)
  634. for _, item := range tt.mockParams.removePermitBuddyParams {
  635. clientSideBuddyListManager.EXPECT().
  636. RemovePermitBuddy(matchContext(), item.me, item.them).
  637. Return(item.err)
  638. }
  639. mockBuddyBroadcaster := newMockbuddyBroadcaster(t)
  640. for _, item := range tt.mockParams.broadcastVisibilityParams {
  641. mockBuddyBroadcaster.EXPECT().
  642. BroadcastVisibility(context.TODO(), matchSession(item.from), item.filter, true).
  643. Return(item.err)
  644. }
  645. svc := PermitDenyService{
  646. buddyBroadcaster: mockBuddyBroadcaster,
  647. clientSideBuddyListManager: clientSideBuddyListManager,
  648. }
  649. err := svc.DelPermListEntries(context.TODO(), tt.instance, tt.bodyIn)
  650. assert.Equal(t, tt.wantErr, err)
  651. })
  652. }
  653. }