relationship_test.go 105 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259
  1. package state
  2. import (
  3. "context"
  4. "os"
  5. "slices"
  6. "testing"
  7. "github.com/stretchr/testify/assert"
  8. "github.com/mk6i/open-oscar-server/wire"
  9. )
  10. func TestSQLiteUserStore_AllRelationships(t *testing.T) {
  11. // buddyList represents the contents of a client-side or server-side buddy list
  12. type buddyList struct {
  13. // privacyMode is your current privacy mode.
  14. privacyMode wire.FeedbagPDMode
  15. // buddyList is the list of users on the buddy list. only active for wire.FeedbagPDModePermitAll and wire.FeedbagPDModePermitOnList
  16. buddyList []IdentScreenName
  17. // buddyList is the list of users on the permit list. only active when wire.FeedbagPDModePermitSome is set.
  18. permitList []IdentScreenName
  19. // buddyList is the list of users on the deny list. only active when wire.FeedbagPDModeDenySome is set.
  20. denyList []IdentScreenName
  21. // buddyPendingAuth lists buddies (subset of buddyList) whose server-side feedbag buddy row
  22. // is written with TLV FeedbagAttributesPending / authPending.
  23. buddyPendingAuth []IdentScreenName
  24. }
  25. tests := []struct {
  26. name string
  27. me IdentScreenName
  28. clientSideLists map[IdentScreenName]buddyList
  29. serverSideLists map[IdentScreenName]buddyList
  30. tempBuddyList map[IdentScreenName][]IdentScreenName
  31. expect []Relationship
  32. filter []IdentScreenName
  33. }{
  34. {
  35. name: "[me, client-side]: Allow all users to contact me [them, client-side]: Allow all users to contact me",
  36. me: NewIdentScreenName("me"),
  37. clientSideLists: map[IdentScreenName]buddyList{
  38. NewIdentScreenName("me"): {
  39. privacyMode: wire.FeedbagPDModePermitAll,
  40. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  41. permitList: []IdentScreenName{},
  42. denyList: []IdentScreenName{},
  43. },
  44. NewIdentScreenName("them"): {
  45. privacyMode: wire.FeedbagPDModePermitAll,
  46. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  47. permitList: []IdentScreenName{},
  48. denyList: []IdentScreenName{},
  49. },
  50. },
  51. serverSideLists: map[IdentScreenName]buddyList{},
  52. expect: []Relationship{
  53. {
  54. User: NewIdentScreenName("them"),
  55. BlocksYou: false,
  56. YouBlock: false,
  57. IsOnTheirList: true,
  58. IsOnYourList: true,
  59. },
  60. },
  61. },
  62. {
  63. name: "[me, client-side]: Allow all users to contact me [them, server-side]: Allow all users to contact me",
  64. me: NewIdentScreenName("me"),
  65. clientSideLists: map[IdentScreenName]buddyList{
  66. NewIdentScreenName("me"): {
  67. privacyMode: wire.FeedbagPDModePermitAll,
  68. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  69. permitList: []IdentScreenName{},
  70. denyList: []IdentScreenName{},
  71. },
  72. },
  73. serverSideLists: map[IdentScreenName]buddyList{
  74. NewIdentScreenName("them"): {
  75. privacyMode: wire.FeedbagPDModePermitAll,
  76. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  77. permitList: []IdentScreenName{},
  78. denyList: []IdentScreenName{},
  79. },
  80. },
  81. expect: []Relationship{
  82. {
  83. User: NewIdentScreenName("them"),
  84. BlocksYou: false,
  85. YouBlock: false,
  86. IsOnTheirList: true,
  87. IsOnYourList: true,
  88. },
  89. },
  90. },
  91. {
  92. name: "[me, client-side]: Allow all users to contact me [them, client-side]: Allow only users on my Buddy List",
  93. me: NewIdentScreenName("me"),
  94. clientSideLists: map[IdentScreenName]buddyList{
  95. NewIdentScreenName("me"): {
  96. privacyMode: wire.FeedbagPDModePermitAll,
  97. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  98. permitList: []IdentScreenName{},
  99. denyList: []IdentScreenName{},
  100. },
  101. NewIdentScreenName("them"): {
  102. privacyMode: wire.FeedbagPDModePermitOnList,
  103. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  104. permitList: []IdentScreenName{},
  105. denyList: []IdentScreenName{},
  106. },
  107. },
  108. serverSideLists: map[IdentScreenName]buddyList{},
  109. expect: []Relationship{
  110. {
  111. User: NewIdentScreenName("them"),
  112. BlocksYou: false,
  113. YouBlock: false,
  114. IsOnTheirList: true,
  115. IsOnYourList: true,
  116. },
  117. },
  118. },
  119. {
  120. name: "[me, client-side]: Allow all users to contact me [them, server-side]: Allow only users on my Buddy List",
  121. me: NewIdentScreenName("me"),
  122. clientSideLists: map[IdentScreenName]buddyList{
  123. NewIdentScreenName("me"): {
  124. privacyMode: wire.FeedbagPDModePermitAll,
  125. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  126. permitList: []IdentScreenName{},
  127. denyList: []IdentScreenName{},
  128. },
  129. },
  130. serverSideLists: map[IdentScreenName]buddyList{
  131. NewIdentScreenName("them"): {
  132. privacyMode: wire.FeedbagPDModePermitOnList,
  133. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  134. permitList: []IdentScreenName{},
  135. denyList: []IdentScreenName{},
  136. },
  137. },
  138. expect: []Relationship{
  139. {
  140. User: NewIdentScreenName("them"),
  141. BlocksYou: false,
  142. YouBlock: false,
  143. IsOnTheirList: true,
  144. IsOnYourList: true,
  145. },
  146. },
  147. },
  148. {
  149. name: "[me, client-side]: Allow all users to contact me [them, client-side]: Allow only the users below",
  150. me: NewIdentScreenName("me"),
  151. clientSideLists: map[IdentScreenName]buddyList{
  152. NewIdentScreenName("me"): {
  153. privacyMode: wire.FeedbagPDModePermitAll,
  154. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  155. permitList: []IdentScreenName{},
  156. denyList: []IdentScreenName{},
  157. },
  158. NewIdentScreenName("them"): {
  159. privacyMode: wire.FeedbagPDModePermitSome,
  160. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  161. permitList: []IdentScreenName{NewIdentScreenName("me")},
  162. denyList: []IdentScreenName{},
  163. },
  164. },
  165. serverSideLists: map[IdentScreenName]buddyList{},
  166. expect: []Relationship{
  167. {
  168. User: NewIdentScreenName("them"),
  169. BlocksYou: false,
  170. YouBlock: false,
  171. IsOnTheirList: true,
  172. IsOnYourList: true,
  173. },
  174. },
  175. },
  176. {
  177. name: "[me, client-side]: Allow all users to contact me [them, server-side]: Allow only the users below",
  178. me: NewIdentScreenName("me"),
  179. clientSideLists: map[IdentScreenName]buddyList{
  180. NewIdentScreenName("me"): {
  181. privacyMode: wire.FeedbagPDModePermitAll,
  182. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  183. permitList: []IdentScreenName{},
  184. denyList: []IdentScreenName{},
  185. },
  186. },
  187. serverSideLists: map[IdentScreenName]buddyList{
  188. NewIdentScreenName("them"): {
  189. privacyMode: wire.FeedbagPDModePermitSome,
  190. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  191. permitList: []IdentScreenName{NewIdentScreenName("me")},
  192. denyList: []IdentScreenName{},
  193. },
  194. },
  195. expect: []Relationship{
  196. {
  197. User: NewIdentScreenName("them"),
  198. BlocksYou: false,
  199. YouBlock: false,
  200. IsOnTheirList: true,
  201. IsOnYourList: true,
  202. },
  203. },
  204. },
  205. {
  206. name: "[me, client-side]: Allow all users to contact me [them, client-side]: Block all users",
  207. me: NewIdentScreenName("me"),
  208. clientSideLists: map[IdentScreenName]buddyList{
  209. NewIdentScreenName("me"): {
  210. privacyMode: wire.FeedbagPDModePermitAll,
  211. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  212. permitList: []IdentScreenName{},
  213. denyList: []IdentScreenName{},
  214. },
  215. NewIdentScreenName("them"): {
  216. privacyMode: wire.FeedbagPDModeDenyAll,
  217. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  218. permitList: []IdentScreenName{},
  219. denyList: []IdentScreenName{},
  220. },
  221. },
  222. serverSideLists: map[IdentScreenName]buddyList{},
  223. expect: []Relationship{
  224. {
  225. User: NewIdentScreenName("them"),
  226. BlocksYou: true,
  227. YouBlock: false,
  228. IsOnTheirList: true,
  229. IsOnYourList: true,
  230. },
  231. },
  232. },
  233. {
  234. name: "[me, client-side]: Allow all users to contact me [them, server-side]: Block all users",
  235. me: NewIdentScreenName("me"),
  236. clientSideLists: map[IdentScreenName]buddyList{
  237. NewIdentScreenName("me"): {
  238. privacyMode: wire.FeedbagPDModePermitAll,
  239. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  240. permitList: []IdentScreenName{},
  241. denyList: []IdentScreenName{},
  242. },
  243. },
  244. serverSideLists: map[IdentScreenName]buddyList{
  245. NewIdentScreenName("them"): {
  246. privacyMode: wire.FeedbagPDModeDenyAll,
  247. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  248. permitList: []IdentScreenName{},
  249. denyList: []IdentScreenName{},
  250. },
  251. },
  252. expect: []Relationship{
  253. {
  254. User: NewIdentScreenName("them"),
  255. BlocksYou: true,
  256. YouBlock: false,
  257. IsOnTheirList: true,
  258. IsOnYourList: true,
  259. },
  260. },
  261. },
  262. {
  263. name: "[me, client-side]: Allow all users to contact me [them, client-side]: Block the users Below",
  264. me: NewIdentScreenName("me"),
  265. clientSideLists: map[IdentScreenName]buddyList{
  266. NewIdentScreenName("me"): {
  267. privacyMode: wire.FeedbagPDModePermitAll,
  268. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  269. permitList: []IdentScreenName{},
  270. denyList: []IdentScreenName{},
  271. },
  272. NewIdentScreenName("them"): {
  273. privacyMode: wire.FeedbagPDModeDenySome,
  274. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  275. permitList: []IdentScreenName{},
  276. denyList: []IdentScreenName{NewIdentScreenName("me")},
  277. },
  278. },
  279. serverSideLists: map[IdentScreenName]buddyList{},
  280. expect: []Relationship{
  281. {
  282. User: NewIdentScreenName("them"),
  283. BlocksYou: true,
  284. YouBlock: false,
  285. IsOnTheirList: true,
  286. IsOnYourList: true,
  287. },
  288. },
  289. },
  290. {
  291. name: "[me, client-side]: Allow all users to contact me [them, server-side]: Block the users Below",
  292. me: NewIdentScreenName("me"),
  293. clientSideLists: map[IdentScreenName]buddyList{
  294. NewIdentScreenName("me"): {
  295. privacyMode: wire.FeedbagPDModePermitAll,
  296. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  297. permitList: []IdentScreenName{},
  298. denyList: []IdentScreenName{},
  299. },
  300. },
  301. serverSideLists: map[IdentScreenName]buddyList{
  302. NewIdentScreenName("them"): {
  303. privacyMode: wire.FeedbagPDModeDenySome,
  304. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  305. permitList: []IdentScreenName{},
  306. denyList: []IdentScreenName{NewIdentScreenName("me")},
  307. },
  308. },
  309. expect: []Relationship{
  310. {
  311. User: NewIdentScreenName("them"),
  312. BlocksYou: true,
  313. YouBlock: false,
  314. IsOnTheirList: true,
  315. IsOnYourList: true,
  316. },
  317. },
  318. },
  319. {
  320. name: "[me, server-side]: Allow all users to contact me [them, client-side]: Allow all users to contact me",
  321. me: NewIdentScreenName("me"),
  322. clientSideLists: map[IdentScreenName]buddyList{
  323. NewIdentScreenName("them"): {
  324. privacyMode: wire.FeedbagPDModePermitAll,
  325. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  326. permitList: []IdentScreenName{},
  327. denyList: []IdentScreenName{},
  328. },
  329. },
  330. serverSideLists: map[IdentScreenName]buddyList{
  331. NewIdentScreenName("me"): {
  332. privacyMode: wire.FeedbagPDModePermitAll,
  333. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  334. permitList: []IdentScreenName{},
  335. denyList: []IdentScreenName{},
  336. },
  337. },
  338. expect: []Relationship{
  339. {
  340. User: NewIdentScreenName("them"),
  341. BlocksYou: false,
  342. YouBlock: false,
  343. IsOnTheirList: true,
  344. IsOnYourList: true,
  345. },
  346. },
  347. },
  348. {
  349. name: "[me, server-side]: Allow all users to contact me [them, server-side]: Allow all users to contact me",
  350. me: NewIdentScreenName("me"),
  351. clientSideLists: map[IdentScreenName]buddyList{},
  352. serverSideLists: map[IdentScreenName]buddyList{
  353. NewIdentScreenName("me"): {
  354. privacyMode: wire.FeedbagPDModePermitAll,
  355. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  356. permitList: []IdentScreenName{},
  357. denyList: []IdentScreenName{},
  358. },
  359. NewIdentScreenName("them"): {
  360. privacyMode: wire.FeedbagPDModePermitAll,
  361. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  362. permitList: []IdentScreenName{},
  363. denyList: []IdentScreenName{},
  364. },
  365. },
  366. expect: []Relationship{
  367. {
  368. User: NewIdentScreenName("them"),
  369. BlocksYou: false,
  370. YouBlock: false,
  371. IsOnTheirList: true,
  372. IsOnYourList: true,
  373. },
  374. },
  375. },
  376. {
  377. name: "[me, server-side]: Allow all users to contact me [them, client-side]: Allow only users on my Buddy List",
  378. me: NewIdentScreenName("me"),
  379. clientSideLists: map[IdentScreenName]buddyList{
  380. NewIdentScreenName("them"): {
  381. privacyMode: wire.FeedbagPDModePermitOnList,
  382. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  383. permitList: []IdentScreenName{},
  384. denyList: []IdentScreenName{},
  385. },
  386. },
  387. serverSideLists: map[IdentScreenName]buddyList{
  388. NewIdentScreenName("me"): {
  389. privacyMode: wire.FeedbagPDModePermitAll,
  390. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  391. permitList: []IdentScreenName{},
  392. denyList: []IdentScreenName{},
  393. },
  394. },
  395. expect: []Relationship{
  396. {
  397. User: NewIdentScreenName("them"),
  398. BlocksYou: false,
  399. YouBlock: false,
  400. IsOnTheirList: true,
  401. IsOnYourList: true,
  402. },
  403. },
  404. },
  405. {
  406. name: "[me, server-side]: Allow all users to contact me [them, server-side]: Allow only users on my Buddy List",
  407. me: NewIdentScreenName("me"),
  408. clientSideLists: map[IdentScreenName]buddyList{},
  409. serverSideLists: map[IdentScreenName]buddyList{
  410. NewIdentScreenName("me"): {
  411. privacyMode: wire.FeedbagPDModePermitAll,
  412. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  413. permitList: []IdentScreenName{},
  414. denyList: []IdentScreenName{},
  415. },
  416. NewIdentScreenName("them"): {
  417. privacyMode: wire.FeedbagPDModePermitOnList,
  418. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  419. permitList: []IdentScreenName{},
  420. denyList: []IdentScreenName{},
  421. },
  422. },
  423. expect: []Relationship{
  424. {
  425. User: NewIdentScreenName("them"),
  426. BlocksYou: false,
  427. YouBlock: false,
  428. IsOnTheirList: true,
  429. IsOnYourList: true,
  430. },
  431. },
  432. },
  433. {
  434. name: "[me, server-side]: Allow all users to contact me [them, client-side]: Allow only the users below",
  435. me: NewIdentScreenName("me"),
  436. clientSideLists: map[IdentScreenName]buddyList{
  437. NewIdentScreenName("them"): {
  438. privacyMode: wire.FeedbagPDModePermitSome,
  439. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  440. permitList: []IdentScreenName{NewIdentScreenName("me")},
  441. denyList: []IdentScreenName{},
  442. },
  443. },
  444. serverSideLists: map[IdentScreenName]buddyList{
  445. NewIdentScreenName("me"): {
  446. privacyMode: wire.FeedbagPDModePermitAll,
  447. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  448. permitList: []IdentScreenName{},
  449. denyList: []IdentScreenName{},
  450. },
  451. },
  452. expect: []Relationship{
  453. {
  454. User: NewIdentScreenName("them"),
  455. BlocksYou: false,
  456. YouBlock: false,
  457. IsOnTheirList: true,
  458. IsOnYourList: true,
  459. },
  460. },
  461. },
  462. {
  463. name: "[me, server-side]: Allow all users to contact me [them, server-side]: Allow only the users below",
  464. me: NewIdentScreenName("me"),
  465. clientSideLists: map[IdentScreenName]buddyList{},
  466. serverSideLists: map[IdentScreenName]buddyList{
  467. NewIdentScreenName("me"): {
  468. privacyMode: wire.FeedbagPDModePermitAll,
  469. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  470. permitList: []IdentScreenName{},
  471. denyList: []IdentScreenName{},
  472. },
  473. NewIdentScreenName("them"): {
  474. privacyMode: wire.FeedbagPDModePermitSome,
  475. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  476. permitList: []IdentScreenName{NewIdentScreenName("me")},
  477. denyList: []IdentScreenName{},
  478. },
  479. },
  480. expect: []Relationship{
  481. {
  482. User: NewIdentScreenName("them"),
  483. BlocksYou: false,
  484. YouBlock: false,
  485. IsOnTheirList: true,
  486. IsOnYourList: true,
  487. },
  488. },
  489. },
  490. {
  491. name: "[me, server-side]: Allow all users to contact me [them, client-side]: Block all users",
  492. me: NewIdentScreenName("me"),
  493. clientSideLists: map[IdentScreenName]buddyList{
  494. NewIdentScreenName("them"): {
  495. privacyMode: wire.FeedbagPDModeDenyAll,
  496. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  497. permitList: []IdentScreenName{},
  498. denyList: []IdentScreenName{},
  499. },
  500. },
  501. serverSideLists: map[IdentScreenName]buddyList{
  502. NewIdentScreenName("me"): {
  503. privacyMode: wire.FeedbagPDModePermitAll,
  504. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  505. permitList: []IdentScreenName{},
  506. denyList: []IdentScreenName{},
  507. },
  508. },
  509. expect: []Relationship{
  510. {
  511. User: NewIdentScreenName("them"),
  512. BlocksYou: true,
  513. YouBlock: false,
  514. IsOnTheirList: true,
  515. IsOnYourList: true,
  516. },
  517. },
  518. },
  519. {
  520. name: "[me, server-side]: Allow all users to contact me [them, server-side]: Block all users",
  521. me: NewIdentScreenName("me"),
  522. clientSideLists: map[IdentScreenName]buddyList{},
  523. serverSideLists: map[IdentScreenName]buddyList{
  524. NewIdentScreenName("me"): {
  525. privacyMode: wire.FeedbagPDModePermitAll,
  526. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  527. permitList: []IdentScreenName{},
  528. denyList: []IdentScreenName{},
  529. },
  530. NewIdentScreenName("them"): {
  531. privacyMode: wire.FeedbagPDModeDenyAll,
  532. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  533. permitList: []IdentScreenName{},
  534. denyList: []IdentScreenName{},
  535. },
  536. },
  537. expect: []Relationship{
  538. {
  539. User: NewIdentScreenName("them"),
  540. BlocksYou: true,
  541. YouBlock: false,
  542. IsOnTheirList: true,
  543. IsOnYourList: true,
  544. },
  545. },
  546. },
  547. {
  548. name: "[me, server-side]: Allow all users to contact me [them, client-side]: Block the users Below",
  549. me: NewIdentScreenName("me"),
  550. clientSideLists: map[IdentScreenName]buddyList{
  551. NewIdentScreenName("them"): {
  552. privacyMode: wire.FeedbagPDModeDenySome,
  553. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  554. permitList: []IdentScreenName{},
  555. denyList: []IdentScreenName{NewIdentScreenName("me")},
  556. },
  557. },
  558. serverSideLists: map[IdentScreenName]buddyList{
  559. NewIdentScreenName("me"): {
  560. privacyMode: wire.FeedbagPDModePermitAll,
  561. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  562. permitList: []IdentScreenName{},
  563. denyList: []IdentScreenName{},
  564. },
  565. },
  566. expect: []Relationship{
  567. {
  568. User: NewIdentScreenName("them"),
  569. BlocksYou: true,
  570. YouBlock: false,
  571. IsOnTheirList: true,
  572. IsOnYourList: true,
  573. },
  574. },
  575. },
  576. {
  577. name: "[me, server-side]: Allow all users to contact me [them, server-side]: Block the users Below",
  578. me: NewIdentScreenName("me"),
  579. clientSideLists: map[IdentScreenName]buddyList{},
  580. serverSideLists: map[IdentScreenName]buddyList{
  581. NewIdentScreenName("me"): {
  582. privacyMode: wire.FeedbagPDModePermitAll,
  583. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  584. permitList: []IdentScreenName{},
  585. denyList: []IdentScreenName{},
  586. },
  587. NewIdentScreenName("them"): {
  588. privacyMode: wire.FeedbagPDModeDenySome,
  589. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  590. permitList: []IdentScreenName{},
  591. denyList: []IdentScreenName{NewIdentScreenName("me")},
  592. },
  593. },
  594. expect: []Relationship{
  595. {
  596. User: NewIdentScreenName("them"),
  597. BlocksYou: true,
  598. YouBlock: false,
  599. IsOnTheirList: true,
  600. IsOnYourList: true,
  601. },
  602. },
  603. },
  604. {
  605. name: "[me, client-side]: Allow only users on my Buddy List [them, client-side]: Allow all users to contact me",
  606. me: NewIdentScreenName("me"),
  607. clientSideLists: map[IdentScreenName]buddyList{
  608. NewIdentScreenName("me"): {
  609. privacyMode: wire.FeedbagPDModePermitOnList,
  610. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  611. permitList: []IdentScreenName{},
  612. denyList: []IdentScreenName{},
  613. },
  614. NewIdentScreenName("them"): {
  615. privacyMode: wire.FeedbagPDModePermitAll,
  616. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  617. permitList: []IdentScreenName{},
  618. denyList: []IdentScreenName{},
  619. },
  620. },
  621. serverSideLists: map[IdentScreenName]buddyList{},
  622. expect: []Relationship{
  623. {
  624. User: NewIdentScreenName("them"),
  625. BlocksYou: false,
  626. YouBlock: false,
  627. IsOnTheirList: true,
  628. IsOnYourList: true,
  629. },
  630. },
  631. },
  632. {
  633. name: "[me, client-side]: Allow only users on my Buddy List [them, server-side]: Allow all users to contact me",
  634. me: NewIdentScreenName("me"),
  635. clientSideLists: map[IdentScreenName]buddyList{
  636. NewIdentScreenName("me"): {
  637. privacyMode: wire.FeedbagPDModePermitOnList,
  638. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  639. permitList: []IdentScreenName{},
  640. denyList: []IdentScreenName{},
  641. },
  642. },
  643. serverSideLists: map[IdentScreenName]buddyList{
  644. NewIdentScreenName("them"): {
  645. privacyMode: wire.FeedbagPDModePermitAll,
  646. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  647. permitList: []IdentScreenName{},
  648. denyList: []IdentScreenName{},
  649. },
  650. },
  651. expect: []Relationship{
  652. {
  653. User: NewIdentScreenName("them"),
  654. BlocksYou: false,
  655. YouBlock: false,
  656. IsOnTheirList: true,
  657. IsOnYourList: true,
  658. },
  659. },
  660. },
  661. {
  662. name: "[me, client-side]: Allow only users on my Buddy List [them, client-side]: Allow only users on my Buddy List",
  663. me: NewIdentScreenName("me"),
  664. clientSideLists: map[IdentScreenName]buddyList{
  665. NewIdentScreenName("me"): {
  666. privacyMode: wire.FeedbagPDModePermitOnList,
  667. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  668. permitList: []IdentScreenName{},
  669. denyList: []IdentScreenName{},
  670. },
  671. NewIdentScreenName("them"): {
  672. privacyMode: wire.FeedbagPDModePermitOnList,
  673. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  674. permitList: []IdentScreenName{},
  675. denyList: []IdentScreenName{},
  676. },
  677. },
  678. serverSideLists: map[IdentScreenName]buddyList{},
  679. expect: []Relationship{
  680. {
  681. User: NewIdentScreenName("them"),
  682. BlocksYou: false,
  683. YouBlock: false,
  684. IsOnTheirList: true,
  685. IsOnYourList: true,
  686. },
  687. },
  688. },
  689. {
  690. name: "[me, client-side]: Allow only users on my Buddy List [them, server-side]: Allow only users on my Buddy List",
  691. me: NewIdentScreenName("me"),
  692. clientSideLists: map[IdentScreenName]buddyList{
  693. NewIdentScreenName("me"): {
  694. privacyMode: wire.FeedbagPDModePermitOnList,
  695. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  696. permitList: []IdentScreenName{},
  697. denyList: []IdentScreenName{},
  698. },
  699. },
  700. serverSideLists: map[IdentScreenName]buddyList{
  701. NewIdentScreenName("them"): {
  702. privacyMode: wire.FeedbagPDModePermitOnList,
  703. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  704. permitList: []IdentScreenName{},
  705. denyList: []IdentScreenName{},
  706. },
  707. },
  708. expect: []Relationship{
  709. {
  710. User: NewIdentScreenName("them"),
  711. BlocksYou: false,
  712. YouBlock: false,
  713. IsOnTheirList: true,
  714. IsOnYourList: true,
  715. },
  716. },
  717. },
  718. {
  719. name: "[me, client-side]: Allow only users on my Buddy List [them, client-side]: Allow only the users below",
  720. me: NewIdentScreenName("me"),
  721. clientSideLists: map[IdentScreenName]buddyList{
  722. NewIdentScreenName("me"): {
  723. privacyMode: wire.FeedbagPDModePermitOnList,
  724. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  725. permitList: []IdentScreenName{},
  726. denyList: []IdentScreenName{},
  727. },
  728. NewIdentScreenName("them"): {
  729. privacyMode: wire.FeedbagPDModePermitSome,
  730. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  731. permitList: []IdentScreenName{NewIdentScreenName("me")},
  732. denyList: []IdentScreenName{},
  733. },
  734. },
  735. serverSideLists: map[IdentScreenName]buddyList{},
  736. expect: []Relationship{
  737. {
  738. User: NewIdentScreenName("them"),
  739. BlocksYou: false,
  740. YouBlock: false,
  741. IsOnTheirList: true,
  742. IsOnYourList: true,
  743. },
  744. },
  745. },
  746. {
  747. name: "[me, client-side]: Allow only users on my Buddy List [them, server-side]: Allow only the users below",
  748. me: NewIdentScreenName("me"),
  749. clientSideLists: map[IdentScreenName]buddyList{
  750. NewIdentScreenName("me"): {
  751. privacyMode: wire.FeedbagPDModePermitOnList,
  752. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  753. permitList: []IdentScreenName{},
  754. denyList: []IdentScreenName{},
  755. },
  756. },
  757. serverSideLists: map[IdentScreenName]buddyList{
  758. NewIdentScreenName("them"): {
  759. privacyMode: wire.FeedbagPDModePermitSome,
  760. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  761. permitList: []IdentScreenName{NewIdentScreenName("me")},
  762. denyList: []IdentScreenName{},
  763. },
  764. },
  765. expect: []Relationship{
  766. {
  767. User: NewIdentScreenName("them"),
  768. BlocksYou: false,
  769. YouBlock: false,
  770. IsOnTheirList: true,
  771. IsOnYourList: true,
  772. },
  773. },
  774. },
  775. {
  776. name: "[me, client-side]: Allow only users on my Buddy List [them, client-side]: Block all users",
  777. me: NewIdentScreenName("me"),
  778. clientSideLists: map[IdentScreenName]buddyList{
  779. NewIdentScreenName("me"): {
  780. privacyMode: wire.FeedbagPDModePermitOnList,
  781. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  782. permitList: []IdentScreenName{},
  783. denyList: []IdentScreenName{},
  784. },
  785. NewIdentScreenName("them"): {
  786. privacyMode: wire.FeedbagPDModeDenyAll,
  787. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  788. permitList: []IdentScreenName{},
  789. denyList: []IdentScreenName{},
  790. },
  791. },
  792. serverSideLists: map[IdentScreenName]buddyList{},
  793. expect: []Relationship{
  794. {
  795. User: NewIdentScreenName("them"),
  796. BlocksYou: true,
  797. YouBlock: false,
  798. IsOnTheirList: true,
  799. IsOnYourList: true,
  800. },
  801. },
  802. },
  803. {
  804. name: "[me, client-side]: Allow only users on my Buddy List [them, server-side]: Block all users",
  805. me: NewIdentScreenName("me"),
  806. clientSideLists: map[IdentScreenName]buddyList{
  807. NewIdentScreenName("me"): {
  808. privacyMode: wire.FeedbagPDModePermitOnList,
  809. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  810. permitList: []IdentScreenName{},
  811. denyList: []IdentScreenName{},
  812. },
  813. },
  814. serverSideLists: map[IdentScreenName]buddyList{
  815. NewIdentScreenName("them"): {
  816. privacyMode: wire.FeedbagPDModeDenyAll,
  817. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  818. permitList: []IdentScreenName{},
  819. denyList: []IdentScreenName{},
  820. },
  821. },
  822. expect: []Relationship{
  823. {
  824. User: NewIdentScreenName("them"),
  825. BlocksYou: true,
  826. YouBlock: false,
  827. IsOnTheirList: true,
  828. IsOnYourList: true,
  829. },
  830. },
  831. },
  832. {
  833. name: "[me, client-side]: Allow only users on my Buddy List [them, client-side]: Block the users Below",
  834. me: NewIdentScreenName("me"),
  835. clientSideLists: map[IdentScreenName]buddyList{
  836. NewIdentScreenName("me"): {
  837. privacyMode: wire.FeedbagPDModePermitOnList,
  838. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  839. permitList: []IdentScreenName{},
  840. denyList: []IdentScreenName{},
  841. },
  842. NewIdentScreenName("them"): {
  843. privacyMode: wire.FeedbagPDModeDenySome,
  844. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  845. permitList: []IdentScreenName{},
  846. denyList: []IdentScreenName{NewIdentScreenName("me")},
  847. },
  848. },
  849. serverSideLists: map[IdentScreenName]buddyList{},
  850. expect: []Relationship{
  851. {
  852. User: NewIdentScreenName("them"),
  853. BlocksYou: true,
  854. YouBlock: false,
  855. IsOnTheirList: true,
  856. IsOnYourList: true,
  857. },
  858. },
  859. },
  860. {
  861. name: "[me, client-side]: Allow only users on my Buddy List [them, server-side]: Block the users Below",
  862. me: NewIdentScreenName("me"),
  863. clientSideLists: map[IdentScreenName]buddyList{
  864. NewIdentScreenName("me"): {
  865. privacyMode: wire.FeedbagPDModePermitOnList,
  866. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  867. permitList: []IdentScreenName{},
  868. denyList: []IdentScreenName{},
  869. },
  870. },
  871. serverSideLists: map[IdentScreenName]buddyList{
  872. NewIdentScreenName("them"): {
  873. privacyMode: wire.FeedbagPDModeDenySome,
  874. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  875. permitList: []IdentScreenName{},
  876. denyList: []IdentScreenName{NewIdentScreenName("me")},
  877. },
  878. },
  879. expect: []Relationship{
  880. {
  881. User: NewIdentScreenName("them"),
  882. BlocksYou: true,
  883. YouBlock: false,
  884. IsOnTheirList: true,
  885. IsOnYourList: true,
  886. },
  887. },
  888. },
  889. {
  890. name: "[me, server-side]: Allow only users on my Buddy List [them, client-side]: Allow all users to contact me",
  891. me: NewIdentScreenName("me"),
  892. clientSideLists: map[IdentScreenName]buddyList{
  893. NewIdentScreenName("them"): {
  894. privacyMode: wire.FeedbagPDModePermitAll,
  895. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  896. permitList: []IdentScreenName{},
  897. denyList: []IdentScreenName{},
  898. },
  899. },
  900. serverSideLists: map[IdentScreenName]buddyList{
  901. NewIdentScreenName("me"): {
  902. privacyMode: wire.FeedbagPDModePermitOnList,
  903. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  904. permitList: []IdentScreenName{},
  905. denyList: []IdentScreenName{},
  906. },
  907. },
  908. expect: []Relationship{
  909. {
  910. User: NewIdentScreenName("them"),
  911. BlocksYou: false,
  912. YouBlock: false,
  913. IsOnTheirList: true,
  914. IsOnYourList: true,
  915. },
  916. },
  917. },
  918. {
  919. name: "[me, server-side]: Allow only users on my Buddy List [them, server-side]: Allow all users to contact me",
  920. me: NewIdentScreenName("me"),
  921. clientSideLists: map[IdentScreenName]buddyList{},
  922. serverSideLists: map[IdentScreenName]buddyList{
  923. NewIdentScreenName("me"): {
  924. privacyMode: wire.FeedbagPDModePermitOnList,
  925. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  926. permitList: []IdentScreenName{},
  927. denyList: []IdentScreenName{},
  928. },
  929. NewIdentScreenName("them"): {
  930. privacyMode: wire.FeedbagPDModePermitAll,
  931. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  932. permitList: []IdentScreenName{},
  933. denyList: []IdentScreenName{},
  934. },
  935. },
  936. expect: []Relationship{
  937. {
  938. User: NewIdentScreenName("them"),
  939. BlocksYou: false,
  940. YouBlock: false,
  941. IsOnTheirList: true,
  942. IsOnYourList: true,
  943. },
  944. },
  945. },
  946. {
  947. name: "[me, server-side]: Allow only users on my Buddy List [them, client-side]: Allow only users on my Buddy List",
  948. me: NewIdentScreenName("me"),
  949. clientSideLists: map[IdentScreenName]buddyList{
  950. NewIdentScreenName("them"): {
  951. privacyMode: wire.FeedbagPDModePermitOnList,
  952. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  953. permitList: []IdentScreenName{},
  954. denyList: []IdentScreenName{},
  955. },
  956. },
  957. serverSideLists: map[IdentScreenName]buddyList{
  958. NewIdentScreenName("me"): {
  959. privacyMode: wire.FeedbagPDModePermitOnList,
  960. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  961. permitList: []IdentScreenName{},
  962. denyList: []IdentScreenName{},
  963. },
  964. },
  965. expect: []Relationship{
  966. {
  967. User: NewIdentScreenName("them"),
  968. BlocksYou: false,
  969. YouBlock: false,
  970. IsOnTheirList: true,
  971. IsOnYourList: true,
  972. },
  973. },
  974. },
  975. {
  976. name: "[me, server-side]: Allow only users on my Buddy List [them, server-side]: Allow only users on my Buddy List",
  977. me: NewIdentScreenName("me"),
  978. clientSideLists: map[IdentScreenName]buddyList{},
  979. serverSideLists: map[IdentScreenName]buddyList{
  980. NewIdentScreenName("me"): {
  981. privacyMode: wire.FeedbagPDModePermitOnList,
  982. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  983. permitList: []IdentScreenName{},
  984. denyList: []IdentScreenName{},
  985. },
  986. NewIdentScreenName("them"): {
  987. privacyMode: wire.FeedbagPDModePermitOnList,
  988. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  989. permitList: []IdentScreenName{},
  990. denyList: []IdentScreenName{},
  991. },
  992. },
  993. expect: []Relationship{
  994. {
  995. User: NewIdentScreenName("them"),
  996. BlocksYou: false,
  997. YouBlock: false,
  998. IsOnTheirList: true,
  999. IsOnYourList: true,
  1000. },
  1001. },
  1002. },
  1003. {
  1004. name: "[me, server-side]: Allow only users on my Buddy List [them, client-side]: Allow only the users below",
  1005. me: NewIdentScreenName("me"),
  1006. clientSideLists: map[IdentScreenName]buddyList{
  1007. NewIdentScreenName("them"): {
  1008. privacyMode: wire.FeedbagPDModePermitSome,
  1009. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  1010. permitList: []IdentScreenName{NewIdentScreenName("me")},
  1011. denyList: []IdentScreenName{},
  1012. },
  1013. },
  1014. serverSideLists: map[IdentScreenName]buddyList{
  1015. NewIdentScreenName("me"): {
  1016. privacyMode: wire.FeedbagPDModePermitOnList,
  1017. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  1018. permitList: []IdentScreenName{},
  1019. denyList: []IdentScreenName{},
  1020. },
  1021. },
  1022. expect: []Relationship{
  1023. {
  1024. User: NewIdentScreenName("them"),
  1025. BlocksYou: false,
  1026. YouBlock: false,
  1027. IsOnTheirList: true,
  1028. IsOnYourList: true,
  1029. },
  1030. },
  1031. },
  1032. {
  1033. name: "[me, server-side]: Allow only users on my Buddy List [them, server-side]: Allow only the users below",
  1034. me: NewIdentScreenName("me"),
  1035. clientSideLists: map[IdentScreenName]buddyList{},
  1036. serverSideLists: map[IdentScreenName]buddyList{
  1037. NewIdentScreenName("me"): {
  1038. privacyMode: wire.FeedbagPDModePermitOnList,
  1039. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  1040. permitList: []IdentScreenName{},
  1041. denyList: []IdentScreenName{},
  1042. },
  1043. NewIdentScreenName("them"): {
  1044. privacyMode: wire.FeedbagPDModePermitSome,
  1045. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  1046. permitList: []IdentScreenName{NewIdentScreenName("me")},
  1047. denyList: []IdentScreenName{},
  1048. },
  1049. },
  1050. expect: []Relationship{
  1051. {
  1052. User: NewIdentScreenName("them"),
  1053. BlocksYou: false,
  1054. YouBlock: false,
  1055. IsOnTheirList: true,
  1056. IsOnYourList: true,
  1057. },
  1058. },
  1059. },
  1060. {
  1061. name: "[me, server-side]: Allow only users on my Buddy List [them, client-side]: Block all users",
  1062. me: NewIdentScreenName("me"),
  1063. clientSideLists: map[IdentScreenName]buddyList{
  1064. NewIdentScreenName("them"): {
  1065. privacyMode: wire.FeedbagPDModeDenyAll,
  1066. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  1067. permitList: []IdentScreenName{},
  1068. denyList: []IdentScreenName{},
  1069. },
  1070. },
  1071. serverSideLists: map[IdentScreenName]buddyList{
  1072. NewIdentScreenName("me"): {
  1073. privacyMode: wire.FeedbagPDModePermitOnList,
  1074. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  1075. permitList: []IdentScreenName{},
  1076. denyList: []IdentScreenName{},
  1077. },
  1078. },
  1079. expect: []Relationship{
  1080. {
  1081. User: NewIdentScreenName("them"),
  1082. BlocksYou: true,
  1083. YouBlock: false,
  1084. IsOnTheirList: true,
  1085. IsOnYourList: true,
  1086. },
  1087. },
  1088. },
  1089. {
  1090. name: "[me, server-side]: Allow only users on my Buddy List [them, server-side]: Block all users",
  1091. me: NewIdentScreenName("me"),
  1092. clientSideLists: map[IdentScreenName]buddyList{},
  1093. serverSideLists: map[IdentScreenName]buddyList{
  1094. NewIdentScreenName("me"): {
  1095. privacyMode: wire.FeedbagPDModePermitOnList,
  1096. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  1097. permitList: []IdentScreenName{},
  1098. denyList: []IdentScreenName{},
  1099. },
  1100. NewIdentScreenName("them"): {
  1101. privacyMode: wire.FeedbagPDModeDenyAll,
  1102. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  1103. permitList: []IdentScreenName{},
  1104. denyList: []IdentScreenName{},
  1105. },
  1106. },
  1107. expect: []Relationship{
  1108. {
  1109. User: NewIdentScreenName("them"),
  1110. BlocksYou: true,
  1111. YouBlock: false,
  1112. IsOnTheirList: true,
  1113. IsOnYourList: true,
  1114. },
  1115. },
  1116. },
  1117. {
  1118. name: "[me, server-side]: Allow only users on my Buddy List [them, client-side]: Block the users Below",
  1119. me: NewIdentScreenName("me"),
  1120. clientSideLists: map[IdentScreenName]buddyList{
  1121. NewIdentScreenName("them"): {
  1122. privacyMode: wire.FeedbagPDModeDenySome,
  1123. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  1124. permitList: []IdentScreenName{},
  1125. denyList: []IdentScreenName{NewIdentScreenName("me")},
  1126. },
  1127. },
  1128. serverSideLists: map[IdentScreenName]buddyList{
  1129. NewIdentScreenName("me"): {
  1130. privacyMode: wire.FeedbagPDModePermitOnList,
  1131. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  1132. permitList: []IdentScreenName{},
  1133. denyList: []IdentScreenName{},
  1134. },
  1135. },
  1136. expect: []Relationship{
  1137. {
  1138. User: NewIdentScreenName("them"),
  1139. BlocksYou: true,
  1140. YouBlock: false,
  1141. IsOnTheirList: true,
  1142. IsOnYourList: true,
  1143. },
  1144. },
  1145. },
  1146. {
  1147. name: "[me, server-side]: Allow only users on my Buddy List [them, server-side]: Block the users Below",
  1148. me: NewIdentScreenName("me"),
  1149. clientSideLists: map[IdentScreenName]buddyList{},
  1150. serverSideLists: map[IdentScreenName]buddyList{
  1151. NewIdentScreenName("me"): {
  1152. privacyMode: wire.FeedbagPDModePermitOnList,
  1153. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  1154. permitList: []IdentScreenName{},
  1155. denyList: []IdentScreenName{},
  1156. },
  1157. NewIdentScreenName("them"): {
  1158. privacyMode: wire.FeedbagPDModeDenySome,
  1159. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  1160. permitList: []IdentScreenName{},
  1161. denyList: []IdentScreenName{NewIdentScreenName("me")},
  1162. },
  1163. },
  1164. expect: []Relationship{
  1165. {
  1166. User: NewIdentScreenName("them"),
  1167. BlocksYou: true,
  1168. YouBlock: false,
  1169. IsOnTheirList: true,
  1170. IsOnYourList: true,
  1171. },
  1172. },
  1173. },
  1174. {
  1175. name: "[me, client-side]: Allow only the users below [them, client-side]: Allow all users to contact me",
  1176. me: NewIdentScreenName("me"),
  1177. clientSideLists: map[IdentScreenName]buddyList{
  1178. NewIdentScreenName("me"): {
  1179. privacyMode: wire.FeedbagPDModePermitSome,
  1180. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  1181. permitList: []IdentScreenName{NewIdentScreenName("them")},
  1182. denyList: []IdentScreenName{},
  1183. },
  1184. NewIdentScreenName("them"): {
  1185. privacyMode: wire.FeedbagPDModePermitAll,
  1186. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  1187. permitList: []IdentScreenName{},
  1188. denyList: []IdentScreenName{},
  1189. },
  1190. },
  1191. serverSideLists: map[IdentScreenName]buddyList{},
  1192. expect: []Relationship{
  1193. {
  1194. User: NewIdentScreenName("them"),
  1195. BlocksYou: false,
  1196. YouBlock: false,
  1197. IsOnTheirList: true,
  1198. IsOnYourList: true,
  1199. },
  1200. },
  1201. },
  1202. {
  1203. name: "[me, client-side]: Allow only the users below [them, server-side]: Allow all users to contact me",
  1204. me: NewIdentScreenName("me"),
  1205. clientSideLists: map[IdentScreenName]buddyList{
  1206. NewIdentScreenName("me"): {
  1207. privacyMode: wire.FeedbagPDModePermitSome,
  1208. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  1209. permitList: []IdentScreenName{NewIdentScreenName("them")},
  1210. denyList: []IdentScreenName{},
  1211. },
  1212. },
  1213. serverSideLists: map[IdentScreenName]buddyList{
  1214. NewIdentScreenName("them"): {
  1215. privacyMode: wire.FeedbagPDModePermitAll,
  1216. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  1217. permitList: []IdentScreenName{},
  1218. denyList: []IdentScreenName{},
  1219. },
  1220. },
  1221. expect: []Relationship{
  1222. {
  1223. User: NewIdentScreenName("them"),
  1224. BlocksYou: false,
  1225. YouBlock: false,
  1226. IsOnTheirList: true,
  1227. IsOnYourList: true,
  1228. },
  1229. },
  1230. },
  1231. {
  1232. name: "[me, client-side]: Allow only the users below [them, client-side]: Allow only users on my Buddy List",
  1233. me: NewIdentScreenName("me"),
  1234. clientSideLists: map[IdentScreenName]buddyList{
  1235. NewIdentScreenName("me"): {
  1236. privacyMode: wire.FeedbagPDModePermitSome,
  1237. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  1238. permitList: []IdentScreenName{NewIdentScreenName("them")},
  1239. denyList: []IdentScreenName{},
  1240. },
  1241. NewIdentScreenName("them"): {
  1242. privacyMode: wire.FeedbagPDModePermitOnList,
  1243. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  1244. permitList: []IdentScreenName{},
  1245. denyList: []IdentScreenName{},
  1246. },
  1247. },
  1248. serverSideLists: map[IdentScreenName]buddyList{},
  1249. expect: []Relationship{
  1250. {
  1251. User: NewIdentScreenName("them"),
  1252. BlocksYou: false,
  1253. YouBlock: false,
  1254. IsOnTheirList: true,
  1255. IsOnYourList: true,
  1256. },
  1257. },
  1258. },
  1259. {
  1260. name: "[me, client-side]: Allow only the users below [them, server-side]: Allow only users on my Buddy List",
  1261. me: NewIdentScreenName("me"),
  1262. clientSideLists: map[IdentScreenName]buddyList{
  1263. NewIdentScreenName("me"): {
  1264. privacyMode: wire.FeedbagPDModePermitSome,
  1265. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  1266. permitList: []IdentScreenName{NewIdentScreenName("them")},
  1267. denyList: []IdentScreenName{},
  1268. },
  1269. },
  1270. serverSideLists: map[IdentScreenName]buddyList{
  1271. NewIdentScreenName("them"): {
  1272. privacyMode: wire.FeedbagPDModePermitOnList,
  1273. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  1274. permitList: []IdentScreenName{},
  1275. denyList: []IdentScreenName{},
  1276. },
  1277. },
  1278. expect: []Relationship{
  1279. {
  1280. User: NewIdentScreenName("them"),
  1281. BlocksYou: false,
  1282. YouBlock: false,
  1283. IsOnTheirList: true,
  1284. IsOnYourList: true,
  1285. },
  1286. },
  1287. },
  1288. {
  1289. name: "[me, client-side]: Allow only the users below [them, client-side]: Allow only the users below",
  1290. me: NewIdentScreenName("me"),
  1291. clientSideLists: map[IdentScreenName]buddyList{
  1292. NewIdentScreenName("me"): {
  1293. privacyMode: wire.FeedbagPDModePermitSome,
  1294. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  1295. permitList: []IdentScreenName{NewIdentScreenName("them")},
  1296. denyList: []IdentScreenName{},
  1297. },
  1298. NewIdentScreenName("them"): {
  1299. privacyMode: wire.FeedbagPDModePermitSome,
  1300. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  1301. permitList: []IdentScreenName{NewIdentScreenName("me")},
  1302. denyList: []IdentScreenName{},
  1303. },
  1304. },
  1305. serverSideLists: map[IdentScreenName]buddyList{},
  1306. expect: []Relationship{
  1307. {
  1308. User: NewIdentScreenName("them"),
  1309. BlocksYou: false,
  1310. YouBlock: false,
  1311. IsOnTheirList: true,
  1312. IsOnYourList: true,
  1313. },
  1314. },
  1315. },
  1316. {
  1317. name: "[me, client-side]: Allow only the users below [them, server-side]: Allow only the users below",
  1318. me: NewIdentScreenName("me"),
  1319. clientSideLists: map[IdentScreenName]buddyList{
  1320. NewIdentScreenName("me"): {
  1321. privacyMode: wire.FeedbagPDModePermitSome,
  1322. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  1323. permitList: []IdentScreenName{NewIdentScreenName("them")},
  1324. denyList: []IdentScreenName{},
  1325. },
  1326. },
  1327. serverSideLists: map[IdentScreenName]buddyList{
  1328. NewIdentScreenName("them"): {
  1329. privacyMode: wire.FeedbagPDModePermitSome,
  1330. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  1331. permitList: []IdentScreenName{NewIdentScreenName("me")},
  1332. denyList: []IdentScreenName{},
  1333. },
  1334. },
  1335. expect: []Relationship{
  1336. {
  1337. User: NewIdentScreenName("them"),
  1338. BlocksYou: false,
  1339. YouBlock: false,
  1340. IsOnTheirList: true,
  1341. IsOnYourList: true,
  1342. },
  1343. },
  1344. },
  1345. {
  1346. name: "[me, client-side]: Allow only the users below [them, client-side]: Block all users",
  1347. me: NewIdentScreenName("me"),
  1348. clientSideLists: map[IdentScreenName]buddyList{
  1349. NewIdentScreenName("me"): {
  1350. privacyMode: wire.FeedbagPDModePermitSome,
  1351. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  1352. permitList: []IdentScreenName{NewIdentScreenName("them")},
  1353. denyList: []IdentScreenName{},
  1354. },
  1355. NewIdentScreenName("them"): {
  1356. privacyMode: wire.FeedbagPDModeDenyAll,
  1357. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  1358. permitList: []IdentScreenName{},
  1359. denyList: []IdentScreenName{},
  1360. },
  1361. },
  1362. serverSideLists: map[IdentScreenName]buddyList{},
  1363. expect: []Relationship{
  1364. {
  1365. User: NewIdentScreenName("them"),
  1366. BlocksYou: true,
  1367. YouBlock: false,
  1368. IsOnTheirList: true,
  1369. IsOnYourList: true,
  1370. },
  1371. },
  1372. },
  1373. {
  1374. name: "[me, client-side]: Allow only the users below [them, server-side]: Block all users",
  1375. me: NewIdentScreenName("me"),
  1376. clientSideLists: map[IdentScreenName]buddyList{
  1377. NewIdentScreenName("me"): {
  1378. privacyMode: wire.FeedbagPDModePermitSome,
  1379. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  1380. permitList: []IdentScreenName{NewIdentScreenName("them")},
  1381. denyList: []IdentScreenName{},
  1382. },
  1383. },
  1384. serverSideLists: map[IdentScreenName]buddyList{
  1385. NewIdentScreenName("them"): {
  1386. privacyMode: wire.FeedbagPDModeDenyAll,
  1387. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  1388. permitList: []IdentScreenName{},
  1389. denyList: []IdentScreenName{},
  1390. },
  1391. },
  1392. expect: []Relationship{
  1393. {
  1394. User: NewIdentScreenName("them"),
  1395. BlocksYou: true,
  1396. YouBlock: false,
  1397. IsOnTheirList: true,
  1398. IsOnYourList: true,
  1399. },
  1400. },
  1401. },
  1402. {
  1403. name: "[me, client-side]: Allow only the users below [them, client-side]: Block the users Below",
  1404. me: NewIdentScreenName("me"),
  1405. clientSideLists: map[IdentScreenName]buddyList{
  1406. NewIdentScreenName("me"): {
  1407. privacyMode: wire.FeedbagPDModePermitSome,
  1408. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  1409. permitList: []IdentScreenName{NewIdentScreenName("them")},
  1410. denyList: []IdentScreenName{},
  1411. },
  1412. NewIdentScreenName("them"): {
  1413. privacyMode: wire.FeedbagPDModeDenySome,
  1414. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  1415. permitList: []IdentScreenName{},
  1416. denyList: []IdentScreenName{NewIdentScreenName("me")},
  1417. },
  1418. },
  1419. serverSideLists: map[IdentScreenName]buddyList{},
  1420. expect: []Relationship{
  1421. {
  1422. User: NewIdentScreenName("them"),
  1423. BlocksYou: true,
  1424. YouBlock: false,
  1425. IsOnTheirList: true,
  1426. IsOnYourList: true,
  1427. },
  1428. },
  1429. },
  1430. {
  1431. name: "[me, client-side]: Allow only the users below [them, server-side]: Block the users Below",
  1432. me: NewIdentScreenName("me"),
  1433. clientSideLists: map[IdentScreenName]buddyList{
  1434. NewIdentScreenName("me"): {
  1435. privacyMode: wire.FeedbagPDModePermitSome,
  1436. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  1437. permitList: []IdentScreenName{NewIdentScreenName("them")},
  1438. denyList: []IdentScreenName{},
  1439. },
  1440. },
  1441. serverSideLists: map[IdentScreenName]buddyList{
  1442. NewIdentScreenName("them"): {
  1443. privacyMode: wire.FeedbagPDModeDenySome,
  1444. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  1445. permitList: []IdentScreenName{},
  1446. denyList: []IdentScreenName{NewIdentScreenName("me")},
  1447. },
  1448. },
  1449. expect: []Relationship{
  1450. {
  1451. User: NewIdentScreenName("them"),
  1452. BlocksYou: true,
  1453. YouBlock: false,
  1454. IsOnTheirList: true,
  1455. IsOnYourList: true,
  1456. },
  1457. },
  1458. },
  1459. {
  1460. name: "[me, server-side]: Allow only the users below [them, client-side]: Allow all users to contact me",
  1461. me: NewIdentScreenName("me"),
  1462. clientSideLists: map[IdentScreenName]buddyList{
  1463. NewIdentScreenName("them"): {
  1464. privacyMode: wire.FeedbagPDModePermitAll,
  1465. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  1466. permitList: []IdentScreenName{},
  1467. denyList: []IdentScreenName{},
  1468. },
  1469. },
  1470. serverSideLists: map[IdentScreenName]buddyList{
  1471. NewIdentScreenName("me"): {
  1472. privacyMode: wire.FeedbagPDModePermitSome,
  1473. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  1474. permitList: []IdentScreenName{NewIdentScreenName("them")},
  1475. denyList: []IdentScreenName{},
  1476. },
  1477. },
  1478. expect: []Relationship{
  1479. {
  1480. User: NewIdentScreenName("them"),
  1481. BlocksYou: false,
  1482. YouBlock: false,
  1483. IsOnTheirList: true,
  1484. IsOnYourList: true,
  1485. },
  1486. },
  1487. },
  1488. {
  1489. name: "[me, server-side]: Allow only the users below [them, server-side]: Allow all users to contact me",
  1490. me: NewIdentScreenName("me"),
  1491. clientSideLists: map[IdentScreenName]buddyList{},
  1492. serverSideLists: map[IdentScreenName]buddyList{
  1493. NewIdentScreenName("me"): {
  1494. privacyMode: wire.FeedbagPDModePermitSome,
  1495. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  1496. permitList: []IdentScreenName{NewIdentScreenName("them")},
  1497. denyList: []IdentScreenName{},
  1498. },
  1499. NewIdentScreenName("them"): {
  1500. privacyMode: wire.FeedbagPDModePermitAll,
  1501. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  1502. permitList: []IdentScreenName{},
  1503. denyList: []IdentScreenName{},
  1504. },
  1505. },
  1506. expect: []Relationship{
  1507. {
  1508. User: NewIdentScreenName("them"),
  1509. BlocksYou: false,
  1510. YouBlock: false,
  1511. IsOnTheirList: true,
  1512. IsOnYourList: true,
  1513. },
  1514. },
  1515. },
  1516. {
  1517. name: "[me, server-side]: Allow only the users below [them, client-side]: Allow only users on my Buddy List",
  1518. me: NewIdentScreenName("me"),
  1519. clientSideLists: map[IdentScreenName]buddyList{
  1520. NewIdentScreenName("them"): {
  1521. privacyMode: wire.FeedbagPDModePermitOnList,
  1522. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  1523. permitList: []IdentScreenName{},
  1524. denyList: []IdentScreenName{},
  1525. },
  1526. },
  1527. serverSideLists: map[IdentScreenName]buddyList{
  1528. NewIdentScreenName("me"): {
  1529. privacyMode: wire.FeedbagPDModePermitSome,
  1530. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  1531. permitList: []IdentScreenName{NewIdentScreenName("them")},
  1532. denyList: []IdentScreenName{},
  1533. },
  1534. },
  1535. expect: []Relationship{
  1536. {
  1537. User: NewIdentScreenName("them"),
  1538. BlocksYou: false,
  1539. YouBlock: false,
  1540. IsOnTheirList: true,
  1541. IsOnYourList: true,
  1542. },
  1543. },
  1544. },
  1545. {
  1546. name: "[me, server-side]: Allow only the users below [them, server-side]: Allow only users on my Buddy List",
  1547. me: NewIdentScreenName("me"),
  1548. clientSideLists: map[IdentScreenName]buddyList{},
  1549. serverSideLists: map[IdentScreenName]buddyList{
  1550. NewIdentScreenName("me"): {
  1551. privacyMode: wire.FeedbagPDModePermitSome,
  1552. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  1553. permitList: []IdentScreenName{NewIdentScreenName("them")},
  1554. denyList: []IdentScreenName{},
  1555. },
  1556. NewIdentScreenName("them"): {
  1557. privacyMode: wire.FeedbagPDModePermitOnList,
  1558. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  1559. permitList: []IdentScreenName{},
  1560. denyList: []IdentScreenName{},
  1561. },
  1562. },
  1563. expect: []Relationship{
  1564. {
  1565. User: NewIdentScreenName("them"),
  1566. BlocksYou: false,
  1567. YouBlock: false,
  1568. IsOnTheirList: true,
  1569. IsOnYourList: true,
  1570. },
  1571. },
  1572. },
  1573. {
  1574. name: "[me, server-side]: Allow only the users below [them, client-side]: Allow only the users below",
  1575. me: NewIdentScreenName("me"),
  1576. clientSideLists: map[IdentScreenName]buddyList{
  1577. NewIdentScreenName("them"): {
  1578. privacyMode: wire.FeedbagPDModePermitSome,
  1579. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  1580. permitList: []IdentScreenName{NewIdentScreenName("me")},
  1581. denyList: []IdentScreenName{},
  1582. },
  1583. },
  1584. serverSideLists: map[IdentScreenName]buddyList{
  1585. NewIdentScreenName("me"): {
  1586. privacyMode: wire.FeedbagPDModePermitSome,
  1587. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  1588. permitList: []IdentScreenName{NewIdentScreenName("them")},
  1589. denyList: []IdentScreenName{},
  1590. },
  1591. },
  1592. expect: []Relationship{
  1593. {
  1594. User: NewIdentScreenName("them"),
  1595. BlocksYou: false,
  1596. YouBlock: false,
  1597. IsOnTheirList: true,
  1598. IsOnYourList: true,
  1599. },
  1600. },
  1601. },
  1602. {
  1603. name: "[me, server-side]: Allow only the users below [them, server-side]: Allow only the users below",
  1604. me: NewIdentScreenName("me"),
  1605. clientSideLists: map[IdentScreenName]buddyList{},
  1606. serverSideLists: map[IdentScreenName]buddyList{
  1607. NewIdentScreenName("me"): {
  1608. privacyMode: wire.FeedbagPDModePermitSome,
  1609. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  1610. permitList: []IdentScreenName{NewIdentScreenName("them")},
  1611. denyList: []IdentScreenName{},
  1612. },
  1613. NewIdentScreenName("them"): {
  1614. privacyMode: wire.FeedbagPDModePermitSome,
  1615. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  1616. permitList: []IdentScreenName{NewIdentScreenName("me")},
  1617. denyList: []IdentScreenName{},
  1618. },
  1619. },
  1620. expect: []Relationship{
  1621. {
  1622. User: NewIdentScreenName("them"),
  1623. BlocksYou: false,
  1624. YouBlock: false,
  1625. IsOnTheirList: true,
  1626. IsOnYourList: true,
  1627. },
  1628. },
  1629. },
  1630. {
  1631. name: "[me, server-side]: Allow only the users below [them, client-side]: Block all users",
  1632. me: NewIdentScreenName("me"),
  1633. clientSideLists: map[IdentScreenName]buddyList{
  1634. NewIdentScreenName("them"): {
  1635. privacyMode: wire.FeedbagPDModeDenyAll,
  1636. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  1637. permitList: []IdentScreenName{},
  1638. denyList: []IdentScreenName{},
  1639. },
  1640. },
  1641. serverSideLists: map[IdentScreenName]buddyList{
  1642. NewIdentScreenName("me"): {
  1643. privacyMode: wire.FeedbagPDModePermitSome,
  1644. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  1645. permitList: []IdentScreenName{NewIdentScreenName("them")},
  1646. denyList: []IdentScreenName{},
  1647. },
  1648. },
  1649. expect: []Relationship{
  1650. {
  1651. User: NewIdentScreenName("them"),
  1652. BlocksYou: true,
  1653. YouBlock: false,
  1654. IsOnTheirList: true,
  1655. IsOnYourList: true,
  1656. },
  1657. },
  1658. },
  1659. {
  1660. name: "[me, server-side]: Allow only the users below [them, server-side]: Block all users",
  1661. me: NewIdentScreenName("me"),
  1662. clientSideLists: map[IdentScreenName]buddyList{},
  1663. serverSideLists: map[IdentScreenName]buddyList{
  1664. NewIdentScreenName("me"): {
  1665. privacyMode: wire.FeedbagPDModePermitSome,
  1666. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  1667. permitList: []IdentScreenName{NewIdentScreenName("them")},
  1668. denyList: []IdentScreenName{},
  1669. },
  1670. NewIdentScreenName("them"): {
  1671. privacyMode: wire.FeedbagPDModeDenyAll,
  1672. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  1673. permitList: []IdentScreenName{},
  1674. denyList: []IdentScreenName{},
  1675. },
  1676. },
  1677. expect: []Relationship{
  1678. {
  1679. User: NewIdentScreenName("them"),
  1680. BlocksYou: true,
  1681. YouBlock: false,
  1682. IsOnTheirList: true,
  1683. IsOnYourList: true,
  1684. },
  1685. },
  1686. },
  1687. {
  1688. name: "[me, server-side]: Allow only the users below [them, client-side]: Block the users Below",
  1689. me: NewIdentScreenName("me"),
  1690. clientSideLists: map[IdentScreenName]buddyList{
  1691. NewIdentScreenName("them"): {
  1692. privacyMode: wire.FeedbagPDModeDenySome,
  1693. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  1694. permitList: []IdentScreenName{},
  1695. denyList: []IdentScreenName{NewIdentScreenName("me")},
  1696. },
  1697. },
  1698. serverSideLists: map[IdentScreenName]buddyList{
  1699. NewIdentScreenName("me"): {
  1700. privacyMode: wire.FeedbagPDModePermitSome,
  1701. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  1702. permitList: []IdentScreenName{NewIdentScreenName("them")},
  1703. denyList: []IdentScreenName{},
  1704. },
  1705. },
  1706. expect: []Relationship{
  1707. {
  1708. User: NewIdentScreenName("them"),
  1709. BlocksYou: true,
  1710. YouBlock: false,
  1711. IsOnTheirList: true,
  1712. IsOnYourList: true,
  1713. },
  1714. },
  1715. },
  1716. {
  1717. name: "[me, server-side]: Allow only the users below [them, server-side]: Block the users Below",
  1718. me: NewIdentScreenName("me"),
  1719. clientSideLists: map[IdentScreenName]buddyList{},
  1720. serverSideLists: map[IdentScreenName]buddyList{
  1721. NewIdentScreenName("me"): {
  1722. privacyMode: wire.FeedbagPDModePermitSome,
  1723. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  1724. permitList: []IdentScreenName{NewIdentScreenName("them")},
  1725. denyList: []IdentScreenName{},
  1726. },
  1727. NewIdentScreenName("them"): {
  1728. privacyMode: wire.FeedbagPDModeDenySome,
  1729. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  1730. permitList: []IdentScreenName{},
  1731. denyList: []IdentScreenName{NewIdentScreenName("me")},
  1732. },
  1733. },
  1734. expect: []Relationship{
  1735. {
  1736. User: NewIdentScreenName("them"),
  1737. BlocksYou: true,
  1738. YouBlock: false,
  1739. IsOnTheirList: true,
  1740. IsOnYourList: true,
  1741. },
  1742. },
  1743. },
  1744. {
  1745. name: "[me, client-side]: Block all users [them, client-side]: Allow all users to contact me",
  1746. me: NewIdentScreenName("me"),
  1747. clientSideLists: map[IdentScreenName]buddyList{
  1748. NewIdentScreenName("me"): {
  1749. privacyMode: wire.FeedbagPDModeDenyAll,
  1750. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  1751. permitList: []IdentScreenName{},
  1752. denyList: []IdentScreenName{},
  1753. },
  1754. NewIdentScreenName("them"): {
  1755. privacyMode: wire.FeedbagPDModePermitAll,
  1756. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  1757. permitList: []IdentScreenName{},
  1758. denyList: []IdentScreenName{},
  1759. },
  1760. },
  1761. serverSideLists: map[IdentScreenName]buddyList{},
  1762. expect: []Relationship{
  1763. {
  1764. User: NewIdentScreenName("them"),
  1765. BlocksYou: false,
  1766. YouBlock: true,
  1767. IsOnTheirList: true,
  1768. IsOnYourList: true,
  1769. },
  1770. },
  1771. },
  1772. {
  1773. name: "[me, client-side]: Block all users [them, server-side]: Allow all users to contact me",
  1774. me: NewIdentScreenName("me"),
  1775. clientSideLists: map[IdentScreenName]buddyList{
  1776. NewIdentScreenName("me"): {
  1777. privacyMode: wire.FeedbagPDModeDenyAll,
  1778. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  1779. permitList: []IdentScreenName{},
  1780. denyList: []IdentScreenName{},
  1781. },
  1782. },
  1783. serverSideLists: map[IdentScreenName]buddyList{
  1784. NewIdentScreenName("them"): {
  1785. privacyMode: wire.FeedbagPDModePermitAll,
  1786. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  1787. permitList: []IdentScreenName{},
  1788. denyList: []IdentScreenName{},
  1789. },
  1790. },
  1791. expect: []Relationship{
  1792. {
  1793. User: NewIdentScreenName("them"),
  1794. BlocksYou: false,
  1795. YouBlock: true,
  1796. IsOnTheirList: true,
  1797. IsOnYourList: true,
  1798. },
  1799. },
  1800. },
  1801. {
  1802. name: "[me, client-side]: Block all users [them, client-side]: Allow only users on my Buddy List",
  1803. me: NewIdentScreenName("me"),
  1804. clientSideLists: map[IdentScreenName]buddyList{
  1805. NewIdentScreenName("me"): {
  1806. privacyMode: wire.FeedbagPDModeDenyAll,
  1807. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  1808. permitList: []IdentScreenName{},
  1809. denyList: []IdentScreenName{},
  1810. },
  1811. NewIdentScreenName("them"): {
  1812. privacyMode: wire.FeedbagPDModePermitOnList,
  1813. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  1814. permitList: []IdentScreenName{},
  1815. denyList: []IdentScreenName{},
  1816. },
  1817. },
  1818. serverSideLists: map[IdentScreenName]buddyList{},
  1819. expect: []Relationship{
  1820. {
  1821. User: NewIdentScreenName("them"),
  1822. BlocksYou: false,
  1823. YouBlock: true,
  1824. IsOnTheirList: true,
  1825. IsOnYourList: true,
  1826. },
  1827. },
  1828. },
  1829. {
  1830. name: "[me, client-side]: Block all users [them, server-side]: Allow only users on my Buddy List",
  1831. me: NewIdentScreenName("me"),
  1832. clientSideLists: map[IdentScreenName]buddyList{
  1833. NewIdentScreenName("me"): {
  1834. privacyMode: wire.FeedbagPDModeDenyAll,
  1835. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  1836. permitList: []IdentScreenName{},
  1837. denyList: []IdentScreenName{},
  1838. },
  1839. },
  1840. serverSideLists: map[IdentScreenName]buddyList{
  1841. NewIdentScreenName("them"): {
  1842. privacyMode: wire.FeedbagPDModePermitOnList,
  1843. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  1844. permitList: []IdentScreenName{},
  1845. denyList: []IdentScreenName{},
  1846. },
  1847. },
  1848. expect: []Relationship{
  1849. {
  1850. User: NewIdentScreenName("them"),
  1851. BlocksYou: false,
  1852. YouBlock: true,
  1853. IsOnTheirList: true,
  1854. IsOnYourList: true,
  1855. },
  1856. },
  1857. },
  1858. {
  1859. name: "[me, client-side]: Block all users [them, client-side]: Allow only the users below",
  1860. me: NewIdentScreenName("me"),
  1861. clientSideLists: map[IdentScreenName]buddyList{
  1862. NewIdentScreenName("me"): {
  1863. privacyMode: wire.FeedbagPDModeDenyAll,
  1864. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  1865. permitList: []IdentScreenName{},
  1866. denyList: []IdentScreenName{},
  1867. },
  1868. NewIdentScreenName("them"): {
  1869. privacyMode: wire.FeedbagPDModePermitSome,
  1870. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  1871. permitList: []IdentScreenName{NewIdentScreenName("me")},
  1872. denyList: []IdentScreenName{},
  1873. },
  1874. },
  1875. serverSideLists: map[IdentScreenName]buddyList{},
  1876. expect: []Relationship{
  1877. {
  1878. User: NewIdentScreenName("them"),
  1879. BlocksYou: false,
  1880. YouBlock: true,
  1881. IsOnTheirList: true,
  1882. IsOnYourList: true,
  1883. },
  1884. },
  1885. },
  1886. {
  1887. name: "[me, client-side]: Block all users [them, server-side]: Allow only the users below",
  1888. me: NewIdentScreenName("me"),
  1889. clientSideLists: map[IdentScreenName]buddyList{
  1890. NewIdentScreenName("me"): {
  1891. privacyMode: wire.FeedbagPDModeDenyAll,
  1892. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  1893. permitList: []IdentScreenName{},
  1894. denyList: []IdentScreenName{},
  1895. },
  1896. },
  1897. serverSideLists: map[IdentScreenName]buddyList{
  1898. NewIdentScreenName("them"): {
  1899. privacyMode: wire.FeedbagPDModePermitSome,
  1900. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  1901. permitList: []IdentScreenName{NewIdentScreenName("me")},
  1902. denyList: []IdentScreenName{},
  1903. },
  1904. },
  1905. expect: []Relationship{
  1906. {
  1907. User: NewIdentScreenName("them"),
  1908. BlocksYou: false,
  1909. YouBlock: true,
  1910. IsOnTheirList: true,
  1911. IsOnYourList: true,
  1912. },
  1913. },
  1914. },
  1915. {
  1916. name: "[me, client-side]: Block all users [them, client-side]: Block all users",
  1917. me: NewIdentScreenName("me"),
  1918. clientSideLists: map[IdentScreenName]buddyList{
  1919. NewIdentScreenName("me"): {
  1920. privacyMode: wire.FeedbagPDModeDenyAll,
  1921. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  1922. permitList: []IdentScreenName{},
  1923. denyList: []IdentScreenName{},
  1924. },
  1925. NewIdentScreenName("them"): {
  1926. privacyMode: wire.FeedbagPDModeDenyAll,
  1927. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  1928. permitList: []IdentScreenName{},
  1929. denyList: []IdentScreenName{},
  1930. },
  1931. },
  1932. serverSideLists: map[IdentScreenName]buddyList{},
  1933. expect: []Relationship{
  1934. {
  1935. User: NewIdentScreenName("them"),
  1936. BlocksYou: true,
  1937. YouBlock: true,
  1938. IsOnTheirList: true,
  1939. IsOnYourList: true,
  1940. },
  1941. },
  1942. },
  1943. {
  1944. name: "[me, client-side]: Block all users [them, server-side]: Block all users",
  1945. me: NewIdentScreenName("me"),
  1946. clientSideLists: map[IdentScreenName]buddyList{
  1947. NewIdentScreenName("me"): {
  1948. privacyMode: wire.FeedbagPDModeDenyAll,
  1949. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  1950. permitList: []IdentScreenName{},
  1951. denyList: []IdentScreenName{},
  1952. },
  1953. },
  1954. serverSideLists: map[IdentScreenName]buddyList{
  1955. NewIdentScreenName("them"): {
  1956. privacyMode: wire.FeedbagPDModeDenyAll,
  1957. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  1958. permitList: []IdentScreenName{},
  1959. denyList: []IdentScreenName{},
  1960. },
  1961. },
  1962. expect: []Relationship{
  1963. {
  1964. User: NewIdentScreenName("them"),
  1965. BlocksYou: true,
  1966. YouBlock: true,
  1967. IsOnTheirList: true,
  1968. IsOnYourList: true,
  1969. },
  1970. },
  1971. },
  1972. {
  1973. name: "[me, client-side]: Block all users [them, client-side]: Block the users Below",
  1974. me: NewIdentScreenName("me"),
  1975. clientSideLists: map[IdentScreenName]buddyList{
  1976. NewIdentScreenName("me"): {
  1977. privacyMode: wire.FeedbagPDModeDenyAll,
  1978. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  1979. permitList: []IdentScreenName{},
  1980. denyList: []IdentScreenName{},
  1981. },
  1982. NewIdentScreenName("them"): {
  1983. privacyMode: wire.FeedbagPDModeDenySome,
  1984. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  1985. permitList: []IdentScreenName{},
  1986. denyList: []IdentScreenName{NewIdentScreenName("me")},
  1987. },
  1988. },
  1989. serverSideLists: map[IdentScreenName]buddyList{},
  1990. expect: []Relationship{
  1991. {
  1992. User: NewIdentScreenName("them"),
  1993. BlocksYou: true,
  1994. YouBlock: true,
  1995. IsOnTheirList: true,
  1996. IsOnYourList: true,
  1997. },
  1998. },
  1999. },
  2000. {
  2001. name: "[me, client-side]: Block all users [them, server-side]: Block the users Below",
  2002. me: NewIdentScreenName("me"),
  2003. clientSideLists: map[IdentScreenName]buddyList{
  2004. NewIdentScreenName("me"): {
  2005. privacyMode: wire.FeedbagPDModeDenyAll,
  2006. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  2007. permitList: []IdentScreenName{},
  2008. denyList: []IdentScreenName{},
  2009. },
  2010. },
  2011. serverSideLists: map[IdentScreenName]buddyList{
  2012. NewIdentScreenName("them"): {
  2013. privacyMode: wire.FeedbagPDModeDenySome,
  2014. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  2015. permitList: []IdentScreenName{},
  2016. denyList: []IdentScreenName{NewIdentScreenName("me")},
  2017. },
  2018. },
  2019. expect: []Relationship{
  2020. {
  2021. User: NewIdentScreenName("them"),
  2022. BlocksYou: true,
  2023. YouBlock: true,
  2024. IsOnTheirList: true,
  2025. IsOnYourList: true,
  2026. },
  2027. },
  2028. },
  2029. {
  2030. name: "[me, server-side]: Block all users [them, client-side]: Allow all users to contact me",
  2031. me: NewIdentScreenName("me"),
  2032. clientSideLists: map[IdentScreenName]buddyList{
  2033. NewIdentScreenName("them"): {
  2034. privacyMode: wire.FeedbagPDModePermitAll,
  2035. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  2036. permitList: []IdentScreenName{},
  2037. denyList: []IdentScreenName{},
  2038. },
  2039. },
  2040. serverSideLists: map[IdentScreenName]buddyList{
  2041. NewIdentScreenName("me"): {
  2042. privacyMode: wire.FeedbagPDModeDenyAll,
  2043. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  2044. permitList: []IdentScreenName{},
  2045. denyList: []IdentScreenName{},
  2046. },
  2047. },
  2048. expect: []Relationship{
  2049. {
  2050. User: NewIdentScreenName("them"),
  2051. BlocksYou: false,
  2052. YouBlock: true,
  2053. IsOnTheirList: true,
  2054. IsOnYourList: true,
  2055. },
  2056. },
  2057. },
  2058. {
  2059. name: "[me, server-side]: Block all users [them, server-side]: Allow all users to contact me",
  2060. me: NewIdentScreenName("me"),
  2061. clientSideLists: map[IdentScreenName]buddyList{},
  2062. serverSideLists: map[IdentScreenName]buddyList{
  2063. NewIdentScreenName("me"): {
  2064. privacyMode: wire.FeedbagPDModeDenyAll,
  2065. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  2066. permitList: []IdentScreenName{},
  2067. denyList: []IdentScreenName{},
  2068. },
  2069. NewIdentScreenName("them"): {
  2070. privacyMode: wire.FeedbagPDModePermitAll,
  2071. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  2072. permitList: []IdentScreenName{},
  2073. denyList: []IdentScreenName{},
  2074. },
  2075. },
  2076. expect: []Relationship{
  2077. {
  2078. User: NewIdentScreenName("them"),
  2079. BlocksYou: false,
  2080. YouBlock: true,
  2081. IsOnTheirList: true,
  2082. IsOnYourList: true,
  2083. },
  2084. },
  2085. },
  2086. {
  2087. name: "[me, server-side]: Block all users [them, client-side]: Allow only users on my Buddy List",
  2088. me: NewIdentScreenName("me"),
  2089. clientSideLists: map[IdentScreenName]buddyList{
  2090. NewIdentScreenName("them"): {
  2091. privacyMode: wire.FeedbagPDModePermitOnList,
  2092. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  2093. permitList: []IdentScreenName{},
  2094. denyList: []IdentScreenName{},
  2095. },
  2096. },
  2097. serverSideLists: map[IdentScreenName]buddyList{
  2098. NewIdentScreenName("me"): {
  2099. privacyMode: wire.FeedbagPDModeDenyAll,
  2100. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  2101. permitList: []IdentScreenName{},
  2102. denyList: []IdentScreenName{},
  2103. },
  2104. },
  2105. expect: []Relationship{
  2106. {
  2107. User: NewIdentScreenName("them"),
  2108. BlocksYou: false,
  2109. YouBlock: true,
  2110. IsOnTheirList: true,
  2111. IsOnYourList: true,
  2112. },
  2113. },
  2114. },
  2115. {
  2116. name: "[me, server-side]: Block all users [them, server-side]: Allow only users on my Buddy List",
  2117. me: NewIdentScreenName("me"),
  2118. clientSideLists: map[IdentScreenName]buddyList{},
  2119. serverSideLists: map[IdentScreenName]buddyList{
  2120. NewIdentScreenName("me"): {
  2121. privacyMode: wire.FeedbagPDModeDenyAll,
  2122. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  2123. permitList: []IdentScreenName{},
  2124. denyList: []IdentScreenName{},
  2125. },
  2126. NewIdentScreenName("them"): {
  2127. privacyMode: wire.FeedbagPDModePermitOnList,
  2128. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  2129. permitList: []IdentScreenName{},
  2130. denyList: []IdentScreenName{},
  2131. },
  2132. },
  2133. expect: []Relationship{
  2134. {
  2135. User: NewIdentScreenName("them"),
  2136. BlocksYou: false,
  2137. YouBlock: true,
  2138. IsOnTheirList: true,
  2139. IsOnYourList: true,
  2140. },
  2141. },
  2142. },
  2143. {
  2144. name: "[me, server-side]: Block all users [them, client-side]: Allow only the users below",
  2145. me: NewIdentScreenName("me"),
  2146. clientSideLists: map[IdentScreenName]buddyList{
  2147. NewIdentScreenName("them"): {
  2148. privacyMode: wire.FeedbagPDModePermitSome,
  2149. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  2150. permitList: []IdentScreenName{NewIdentScreenName("me")},
  2151. denyList: []IdentScreenName{},
  2152. },
  2153. },
  2154. serverSideLists: map[IdentScreenName]buddyList{
  2155. NewIdentScreenName("me"): {
  2156. privacyMode: wire.FeedbagPDModeDenyAll,
  2157. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  2158. permitList: []IdentScreenName{},
  2159. denyList: []IdentScreenName{},
  2160. },
  2161. },
  2162. expect: []Relationship{
  2163. {
  2164. User: NewIdentScreenName("them"),
  2165. BlocksYou: false,
  2166. YouBlock: true,
  2167. IsOnTheirList: true,
  2168. IsOnYourList: true,
  2169. },
  2170. },
  2171. },
  2172. {
  2173. name: "[me, server-side]: Block all users [them, server-side]: Allow only the users below",
  2174. me: NewIdentScreenName("me"),
  2175. clientSideLists: map[IdentScreenName]buddyList{},
  2176. serverSideLists: map[IdentScreenName]buddyList{
  2177. NewIdentScreenName("me"): {
  2178. privacyMode: wire.FeedbagPDModeDenyAll,
  2179. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  2180. permitList: []IdentScreenName{},
  2181. denyList: []IdentScreenName{},
  2182. },
  2183. NewIdentScreenName("them"): {
  2184. privacyMode: wire.FeedbagPDModePermitSome,
  2185. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  2186. permitList: []IdentScreenName{NewIdentScreenName("me")},
  2187. denyList: []IdentScreenName{},
  2188. },
  2189. },
  2190. expect: []Relationship{
  2191. {
  2192. User: NewIdentScreenName("them"),
  2193. BlocksYou: false,
  2194. YouBlock: true,
  2195. IsOnTheirList: true,
  2196. IsOnYourList: true,
  2197. },
  2198. },
  2199. },
  2200. {
  2201. name: "[me, server-side]: Block all users [them, client-side]: Block all users",
  2202. me: NewIdentScreenName("me"),
  2203. clientSideLists: map[IdentScreenName]buddyList{
  2204. NewIdentScreenName("them"): {
  2205. privacyMode: wire.FeedbagPDModeDenyAll,
  2206. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  2207. permitList: []IdentScreenName{},
  2208. denyList: []IdentScreenName{},
  2209. },
  2210. },
  2211. serverSideLists: map[IdentScreenName]buddyList{
  2212. NewIdentScreenName("me"): {
  2213. privacyMode: wire.FeedbagPDModeDenyAll,
  2214. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  2215. permitList: []IdentScreenName{},
  2216. denyList: []IdentScreenName{},
  2217. },
  2218. },
  2219. expect: []Relationship{
  2220. {
  2221. User: NewIdentScreenName("them"),
  2222. BlocksYou: true,
  2223. YouBlock: true,
  2224. IsOnTheirList: true,
  2225. IsOnYourList: true,
  2226. },
  2227. },
  2228. },
  2229. {
  2230. name: "[me, server-side]: Block all users [them, server-side]: Block all users",
  2231. me: NewIdentScreenName("me"),
  2232. clientSideLists: map[IdentScreenName]buddyList{},
  2233. serverSideLists: map[IdentScreenName]buddyList{
  2234. NewIdentScreenName("me"): {
  2235. privacyMode: wire.FeedbagPDModeDenyAll,
  2236. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  2237. permitList: []IdentScreenName{},
  2238. denyList: []IdentScreenName{},
  2239. },
  2240. NewIdentScreenName("them"): {
  2241. privacyMode: wire.FeedbagPDModeDenyAll,
  2242. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  2243. permitList: []IdentScreenName{},
  2244. denyList: []IdentScreenName{},
  2245. },
  2246. },
  2247. expect: []Relationship{
  2248. {
  2249. User: NewIdentScreenName("them"),
  2250. BlocksYou: true,
  2251. YouBlock: true,
  2252. IsOnTheirList: true,
  2253. IsOnYourList: true,
  2254. },
  2255. },
  2256. },
  2257. {
  2258. name: "[me, server-side]: Block all users [them, client-side]: Block the users Below",
  2259. me: NewIdentScreenName("me"),
  2260. clientSideLists: map[IdentScreenName]buddyList{
  2261. NewIdentScreenName("them"): {
  2262. privacyMode: wire.FeedbagPDModeDenySome,
  2263. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  2264. permitList: []IdentScreenName{},
  2265. denyList: []IdentScreenName{NewIdentScreenName("me")},
  2266. },
  2267. },
  2268. serverSideLists: map[IdentScreenName]buddyList{
  2269. NewIdentScreenName("me"): {
  2270. privacyMode: wire.FeedbagPDModeDenyAll,
  2271. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  2272. permitList: []IdentScreenName{},
  2273. denyList: []IdentScreenName{},
  2274. },
  2275. },
  2276. expect: []Relationship{
  2277. {
  2278. User: NewIdentScreenName("them"),
  2279. BlocksYou: true,
  2280. YouBlock: true,
  2281. IsOnTheirList: true,
  2282. IsOnYourList: true,
  2283. },
  2284. },
  2285. },
  2286. {
  2287. name: "[me, server-side]: Block all users [them, server-side]: Block the users Below",
  2288. me: NewIdentScreenName("me"),
  2289. clientSideLists: map[IdentScreenName]buddyList{},
  2290. serverSideLists: map[IdentScreenName]buddyList{
  2291. NewIdentScreenName("me"): {
  2292. privacyMode: wire.FeedbagPDModeDenyAll,
  2293. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  2294. permitList: []IdentScreenName{},
  2295. denyList: []IdentScreenName{},
  2296. },
  2297. NewIdentScreenName("them"): {
  2298. privacyMode: wire.FeedbagPDModeDenySome,
  2299. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  2300. permitList: []IdentScreenName{},
  2301. denyList: []IdentScreenName{NewIdentScreenName("me")},
  2302. },
  2303. },
  2304. expect: []Relationship{
  2305. {
  2306. User: NewIdentScreenName("them"),
  2307. BlocksYou: true,
  2308. YouBlock: true,
  2309. IsOnTheirList: true,
  2310. IsOnYourList: true,
  2311. },
  2312. },
  2313. },
  2314. {
  2315. name: "[me, client-side]: Block the users Below [them, client-side]: Allow all users to contact me",
  2316. me: NewIdentScreenName("me"),
  2317. clientSideLists: map[IdentScreenName]buddyList{
  2318. NewIdentScreenName("me"): {
  2319. privacyMode: wire.FeedbagPDModeDenySome,
  2320. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  2321. permitList: []IdentScreenName{},
  2322. denyList: []IdentScreenName{NewIdentScreenName("them")},
  2323. },
  2324. NewIdentScreenName("them"): {
  2325. privacyMode: wire.FeedbagPDModePermitAll,
  2326. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  2327. permitList: []IdentScreenName{},
  2328. denyList: []IdentScreenName{},
  2329. },
  2330. },
  2331. serverSideLists: map[IdentScreenName]buddyList{},
  2332. expect: []Relationship{
  2333. {
  2334. User: NewIdentScreenName("them"),
  2335. BlocksYou: false,
  2336. YouBlock: true,
  2337. IsOnTheirList: true,
  2338. IsOnYourList: true,
  2339. },
  2340. },
  2341. },
  2342. {
  2343. name: "[me, client-side]: Block the users Below [them, server-side]: Allow all users to contact me",
  2344. me: NewIdentScreenName("me"),
  2345. clientSideLists: map[IdentScreenName]buddyList{
  2346. NewIdentScreenName("me"): {
  2347. privacyMode: wire.FeedbagPDModeDenySome,
  2348. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  2349. permitList: []IdentScreenName{},
  2350. denyList: []IdentScreenName{NewIdentScreenName("them")},
  2351. },
  2352. },
  2353. serverSideLists: map[IdentScreenName]buddyList{
  2354. NewIdentScreenName("them"): {
  2355. privacyMode: wire.FeedbagPDModePermitAll,
  2356. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  2357. permitList: []IdentScreenName{},
  2358. denyList: []IdentScreenName{},
  2359. },
  2360. },
  2361. expect: []Relationship{
  2362. {
  2363. User: NewIdentScreenName("them"),
  2364. BlocksYou: false,
  2365. YouBlock: true,
  2366. IsOnTheirList: true,
  2367. IsOnYourList: true,
  2368. },
  2369. },
  2370. },
  2371. {
  2372. name: "[me, client-side]: Block the users Below [them, client-side]: Allow only users on my Buddy List",
  2373. me: NewIdentScreenName("me"),
  2374. clientSideLists: map[IdentScreenName]buddyList{
  2375. NewIdentScreenName("me"): {
  2376. privacyMode: wire.FeedbagPDModeDenySome,
  2377. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  2378. permitList: []IdentScreenName{},
  2379. denyList: []IdentScreenName{NewIdentScreenName("them")},
  2380. },
  2381. NewIdentScreenName("them"): {
  2382. privacyMode: wire.FeedbagPDModePermitOnList,
  2383. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  2384. permitList: []IdentScreenName{},
  2385. denyList: []IdentScreenName{},
  2386. },
  2387. },
  2388. serverSideLists: map[IdentScreenName]buddyList{},
  2389. expect: []Relationship{
  2390. {
  2391. User: NewIdentScreenName("them"),
  2392. BlocksYou: false,
  2393. YouBlock: true,
  2394. IsOnTheirList: true,
  2395. IsOnYourList: true,
  2396. },
  2397. },
  2398. },
  2399. {
  2400. name: "[me, client-side]: Block the users Below [them, server-side]: Allow only users on my Buddy List",
  2401. me: NewIdentScreenName("me"),
  2402. clientSideLists: map[IdentScreenName]buddyList{
  2403. NewIdentScreenName("me"): {
  2404. privacyMode: wire.FeedbagPDModeDenySome,
  2405. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  2406. permitList: []IdentScreenName{},
  2407. denyList: []IdentScreenName{NewIdentScreenName("them")},
  2408. },
  2409. },
  2410. serverSideLists: map[IdentScreenName]buddyList{
  2411. NewIdentScreenName("them"): {
  2412. privacyMode: wire.FeedbagPDModePermitOnList,
  2413. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  2414. permitList: []IdentScreenName{},
  2415. denyList: []IdentScreenName{},
  2416. },
  2417. },
  2418. expect: []Relationship{
  2419. {
  2420. User: NewIdentScreenName("them"),
  2421. BlocksYou: false,
  2422. YouBlock: true,
  2423. IsOnTheirList: true,
  2424. IsOnYourList: true,
  2425. },
  2426. },
  2427. },
  2428. {
  2429. name: "[me, client-side]: Block the users Below [them, client-side]: Allow only the users below",
  2430. me: NewIdentScreenName("me"),
  2431. clientSideLists: map[IdentScreenName]buddyList{
  2432. NewIdentScreenName("me"): {
  2433. privacyMode: wire.FeedbagPDModeDenySome,
  2434. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  2435. permitList: []IdentScreenName{},
  2436. denyList: []IdentScreenName{NewIdentScreenName("them")},
  2437. },
  2438. NewIdentScreenName("them"): {
  2439. privacyMode: wire.FeedbagPDModePermitSome,
  2440. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  2441. permitList: []IdentScreenName{NewIdentScreenName("me")},
  2442. denyList: []IdentScreenName{},
  2443. },
  2444. },
  2445. serverSideLists: map[IdentScreenName]buddyList{},
  2446. expect: []Relationship{
  2447. {
  2448. User: NewIdentScreenName("them"),
  2449. BlocksYou: false,
  2450. YouBlock: true,
  2451. IsOnTheirList: true,
  2452. IsOnYourList: true,
  2453. },
  2454. },
  2455. },
  2456. {
  2457. name: "[me, client-side]: Block the users Below [them, server-side]: Allow only the users below",
  2458. me: NewIdentScreenName("me"),
  2459. clientSideLists: map[IdentScreenName]buddyList{
  2460. NewIdentScreenName("me"): {
  2461. privacyMode: wire.FeedbagPDModeDenySome,
  2462. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  2463. permitList: []IdentScreenName{},
  2464. denyList: []IdentScreenName{NewIdentScreenName("them")},
  2465. },
  2466. },
  2467. serverSideLists: map[IdentScreenName]buddyList{
  2468. NewIdentScreenName("them"): {
  2469. privacyMode: wire.FeedbagPDModePermitSome,
  2470. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  2471. permitList: []IdentScreenName{NewIdentScreenName("me")},
  2472. denyList: []IdentScreenName{},
  2473. },
  2474. },
  2475. expect: []Relationship{
  2476. {
  2477. User: NewIdentScreenName("them"),
  2478. BlocksYou: false,
  2479. YouBlock: true,
  2480. IsOnTheirList: true,
  2481. IsOnYourList: true,
  2482. },
  2483. },
  2484. },
  2485. {
  2486. name: "[me, client-side]: Block the users Below [them, client-side]: Block all users",
  2487. me: NewIdentScreenName("me"),
  2488. clientSideLists: map[IdentScreenName]buddyList{
  2489. NewIdentScreenName("me"): {
  2490. privacyMode: wire.FeedbagPDModeDenySome,
  2491. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  2492. permitList: []IdentScreenName{},
  2493. denyList: []IdentScreenName{NewIdentScreenName("them")},
  2494. },
  2495. NewIdentScreenName("them"): {
  2496. privacyMode: wire.FeedbagPDModeDenyAll,
  2497. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  2498. permitList: []IdentScreenName{},
  2499. denyList: []IdentScreenName{},
  2500. },
  2501. },
  2502. serverSideLists: map[IdentScreenName]buddyList{},
  2503. expect: []Relationship{
  2504. {
  2505. User: NewIdentScreenName("them"),
  2506. BlocksYou: true,
  2507. YouBlock: true,
  2508. IsOnTheirList: true,
  2509. IsOnYourList: true,
  2510. },
  2511. },
  2512. },
  2513. {
  2514. name: "[me, client-side]: Block the users Below [them, server-side]: Block all users",
  2515. me: NewIdentScreenName("me"),
  2516. clientSideLists: map[IdentScreenName]buddyList{
  2517. NewIdentScreenName("me"): {
  2518. privacyMode: wire.FeedbagPDModeDenySome,
  2519. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  2520. permitList: []IdentScreenName{},
  2521. denyList: []IdentScreenName{NewIdentScreenName("them")},
  2522. },
  2523. },
  2524. serverSideLists: map[IdentScreenName]buddyList{
  2525. NewIdentScreenName("them"): {
  2526. privacyMode: wire.FeedbagPDModeDenyAll,
  2527. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  2528. permitList: []IdentScreenName{},
  2529. denyList: []IdentScreenName{},
  2530. },
  2531. },
  2532. expect: []Relationship{
  2533. {
  2534. User: NewIdentScreenName("them"),
  2535. BlocksYou: true,
  2536. YouBlock: true,
  2537. IsOnTheirList: true,
  2538. IsOnYourList: true,
  2539. },
  2540. },
  2541. },
  2542. {
  2543. name: "[me, client-side]: Block the users Below [them, client-side]: Block the users Below",
  2544. me: NewIdentScreenName("me"),
  2545. clientSideLists: map[IdentScreenName]buddyList{
  2546. NewIdentScreenName("me"): {
  2547. privacyMode: wire.FeedbagPDModeDenySome,
  2548. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  2549. permitList: []IdentScreenName{},
  2550. denyList: []IdentScreenName{NewIdentScreenName("them")},
  2551. },
  2552. NewIdentScreenName("them"): {
  2553. privacyMode: wire.FeedbagPDModeDenySome,
  2554. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  2555. permitList: []IdentScreenName{},
  2556. denyList: []IdentScreenName{NewIdentScreenName("me")},
  2557. },
  2558. },
  2559. serverSideLists: map[IdentScreenName]buddyList{},
  2560. expect: []Relationship{
  2561. {
  2562. User: NewIdentScreenName("them"),
  2563. BlocksYou: true,
  2564. YouBlock: true,
  2565. IsOnTheirList: true,
  2566. IsOnYourList: true,
  2567. },
  2568. },
  2569. },
  2570. {
  2571. name: "[me, client-side]: Block the users Below [them, server-side]: Block the users Below",
  2572. me: NewIdentScreenName("me"),
  2573. clientSideLists: map[IdentScreenName]buddyList{
  2574. NewIdentScreenName("me"): {
  2575. privacyMode: wire.FeedbagPDModeDenySome,
  2576. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  2577. permitList: []IdentScreenName{},
  2578. denyList: []IdentScreenName{NewIdentScreenName("them")},
  2579. },
  2580. },
  2581. serverSideLists: map[IdentScreenName]buddyList{
  2582. NewIdentScreenName("them"): {
  2583. privacyMode: wire.FeedbagPDModeDenySome,
  2584. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  2585. permitList: []IdentScreenName{},
  2586. denyList: []IdentScreenName{NewIdentScreenName("me")},
  2587. },
  2588. },
  2589. expect: []Relationship{
  2590. {
  2591. User: NewIdentScreenName("them"),
  2592. BlocksYou: true,
  2593. YouBlock: true,
  2594. IsOnTheirList: true,
  2595. IsOnYourList: true,
  2596. },
  2597. },
  2598. },
  2599. {
  2600. name: "[me, server-side]: Block the users Below [them, client-side]: Allow all users to contact me",
  2601. me: NewIdentScreenName("me"),
  2602. clientSideLists: map[IdentScreenName]buddyList{
  2603. NewIdentScreenName("them"): {
  2604. privacyMode: wire.FeedbagPDModePermitAll,
  2605. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  2606. permitList: []IdentScreenName{},
  2607. denyList: []IdentScreenName{},
  2608. },
  2609. },
  2610. serverSideLists: map[IdentScreenName]buddyList{
  2611. NewIdentScreenName("me"): {
  2612. privacyMode: wire.FeedbagPDModeDenySome,
  2613. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  2614. permitList: []IdentScreenName{},
  2615. denyList: []IdentScreenName{NewIdentScreenName("them")},
  2616. },
  2617. },
  2618. expect: []Relationship{
  2619. {
  2620. User: NewIdentScreenName("them"),
  2621. BlocksYou: false,
  2622. YouBlock: true,
  2623. IsOnTheirList: true,
  2624. IsOnYourList: true,
  2625. },
  2626. },
  2627. },
  2628. {
  2629. name: "[me, server-side]: Block the users Below [them, server-side]: Allow all users to contact me",
  2630. me: NewIdentScreenName("me"),
  2631. clientSideLists: map[IdentScreenName]buddyList{},
  2632. serverSideLists: map[IdentScreenName]buddyList{
  2633. NewIdentScreenName("me"): {
  2634. privacyMode: wire.FeedbagPDModeDenySome,
  2635. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  2636. permitList: []IdentScreenName{},
  2637. denyList: []IdentScreenName{NewIdentScreenName("them")},
  2638. },
  2639. NewIdentScreenName("them"): {
  2640. privacyMode: wire.FeedbagPDModePermitAll,
  2641. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  2642. permitList: []IdentScreenName{},
  2643. denyList: []IdentScreenName{},
  2644. },
  2645. },
  2646. expect: []Relationship{
  2647. {
  2648. User: NewIdentScreenName("them"),
  2649. BlocksYou: false,
  2650. YouBlock: true,
  2651. IsOnTheirList: true,
  2652. IsOnYourList: true,
  2653. },
  2654. },
  2655. },
  2656. {
  2657. name: "[me, server-side]: Block the users Below [them, client-side]: Allow only users on my Buddy List",
  2658. me: NewIdentScreenName("me"),
  2659. clientSideLists: map[IdentScreenName]buddyList{
  2660. NewIdentScreenName("them"): {
  2661. privacyMode: wire.FeedbagPDModePermitOnList,
  2662. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  2663. permitList: []IdentScreenName{},
  2664. denyList: []IdentScreenName{},
  2665. },
  2666. },
  2667. serverSideLists: map[IdentScreenName]buddyList{
  2668. NewIdentScreenName("me"): {
  2669. privacyMode: wire.FeedbagPDModeDenySome,
  2670. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  2671. permitList: []IdentScreenName{},
  2672. denyList: []IdentScreenName{NewIdentScreenName("them")},
  2673. },
  2674. },
  2675. expect: []Relationship{
  2676. {
  2677. User: NewIdentScreenName("them"),
  2678. BlocksYou: false,
  2679. YouBlock: true,
  2680. IsOnTheirList: true,
  2681. IsOnYourList: true,
  2682. },
  2683. },
  2684. },
  2685. {
  2686. name: "[me, server-side]: Block the users Below [them, server-side]: Allow only users on my Buddy List",
  2687. me: NewIdentScreenName("me"),
  2688. clientSideLists: map[IdentScreenName]buddyList{},
  2689. serverSideLists: map[IdentScreenName]buddyList{
  2690. NewIdentScreenName("me"): {
  2691. privacyMode: wire.FeedbagPDModeDenySome,
  2692. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  2693. permitList: []IdentScreenName{},
  2694. denyList: []IdentScreenName{NewIdentScreenName("them")},
  2695. },
  2696. NewIdentScreenName("them"): {
  2697. privacyMode: wire.FeedbagPDModePermitOnList,
  2698. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  2699. permitList: []IdentScreenName{},
  2700. denyList: []IdentScreenName{},
  2701. },
  2702. },
  2703. expect: []Relationship{
  2704. {
  2705. User: NewIdentScreenName("them"),
  2706. BlocksYou: false,
  2707. YouBlock: true,
  2708. IsOnTheirList: true,
  2709. IsOnYourList: true,
  2710. },
  2711. },
  2712. },
  2713. {
  2714. name: "[me, server-side]: Block the users Below [them, client-side]: Allow only the users below",
  2715. me: NewIdentScreenName("me"),
  2716. clientSideLists: map[IdentScreenName]buddyList{
  2717. NewIdentScreenName("them"): {
  2718. privacyMode: wire.FeedbagPDModePermitSome,
  2719. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  2720. permitList: []IdentScreenName{NewIdentScreenName("me")},
  2721. denyList: []IdentScreenName{},
  2722. },
  2723. },
  2724. serverSideLists: map[IdentScreenName]buddyList{
  2725. NewIdentScreenName("me"): {
  2726. privacyMode: wire.FeedbagPDModeDenySome,
  2727. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  2728. permitList: []IdentScreenName{},
  2729. denyList: []IdentScreenName{NewIdentScreenName("them")},
  2730. },
  2731. },
  2732. expect: []Relationship{
  2733. {
  2734. User: NewIdentScreenName("them"),
  2735. BlocksYou: false,
  2736. YouBlock: true,
  2737. IsOnTheirList: true,
  2738. IsOnYourList: true,
  2739. },
  2740. },
  2741. },
  2742. {
  2743. name: "[me, server-side]: Block the users Below [them, server-side]: Allow only the users below",
  2744. me: NewIdentScreenName("me"),
  2745. clientSideLists: map[IdentScreenName]buddyList{},
  2746. serverSideLists: map[IdentScreenName]buddyList{
  2747. NewIdentScreenName("me"): {
  2748. privacyMode: wire.FeedbagPDModeDenySome,
  2749. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  2750. permitList: []IdentScreenName{},
  2751. denyList: []IdentScreenName{NewIdentScreenName("them")},
  2752. },
  2753. NewIdentScreenName("them"): {
  2754. privacyMode: wire.FeedbagPDModePermitSome,
  2755. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  2756. permitList: []IdentScreenName{NewIdentScreenName("me")},
  2757. denyList: []IdentScreenName{},
  2758. },
  2759. },
  2760. expect: []Relationship{
  2761. {
  2762. User: NewIdentScreenName("them"),
  2763. BlocksYou: false,
  2764. YouBlock: true,
  2765. IsOnTheirList: true,
  2766. IsOnYourList: true,
  2767. },
  2768. },
  2769. },
  2770. {
  2771. name: "[me, server-side]: Block the users Below [them, client-side]: Block all users",
  2772. me: NewIdentScreenName("me"),
  2773. clientSideLists: map[IdentScreenName]buddyList{
  2774. NewIdentScreenName("them"): {
  2775. privacyMode: wire.FeedbagPDModeDenyAll,
  2776. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  2777. permitList: []IdentScreenName{},
  2778. denyList: []IdentScreenName{},
  2779. },
  2780. },
  2781. serverSideLists: map[IdentScreenName]buddyList{
  2782. NewIdentScreenName("me"): {
  2783. privacyMode: wire.FeedbagPDModeDenySome,
  2784. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  2785. permitList: []IdentScreenName{},
  2786. denyList: []IdentScreenName{NewIdentScreenName("them")},
  2787. },
  2788. },
  2789. expect: []Relationship{
  2790. {
  2791. User: NewIdentScreenName("them"),
  2792. BlocksYou: true,
  2793. YouBlock: true,
  2794. IsOnTheirList: true,
  2795. IsOnYourList: true,
  2796. },
  2797. },
  2798. },
  2799. {
  2800. name: "[me, server-side]: Block the users Below [them, server-side]: Block all users",
  2801. me: NewIdentScreenName("me"),
  2802. clientSideLists: map[IdentScreenName]buddyList{},
  2803. serverSideLists: map[IdentScreenName]buddyList{
  2804. NewIdentScreenName("me"): {
  2805. privacyMode: wire.FeedbagPDModeDenySome,
  2806. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  2807. permitList: []IdentScreenName{},
  2808. denyList: []IdentScreenName{NewIdentScreenName("them")},
  2809. },
  2810. NewIdentScreenName("them"): {
  2811. privacyMode: wire.FeedbagPDModeDenyAll,
  2812. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  2813. permitList: []IdentScreenName{},
  2814. denyList: []IdentScreenName{},
  2815. },
  2816. },
  2817. expect: []Relationship{
  2818. {
  2819. User: NewIdentScreenName("them"),
  2820. BlocksYou: true,
  2821. YouBlock: true,
  2822. IsOnTheirList: true,
  2823. IsOnYourList: true,
  2824. },
  2825. },
  2826. },
  2827. {
  2828. name: "[me, server-side]: Block the users Below [them, client-side]: Block the users Below",
  2829. me: NewIdentScreenName("me"),
  2830. clientSideLists: map[IdentScreenName]buddyList{
  2831. NewIdentScreenName("them"): {
  2832. privacyMode: wire.FeedbagPDModeDenySome,
  2833. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  2834. permitList: []IdentScreenName{},
  2835. denyList: []IdentScreenName{NewIdentScreenName("me")},
  2836. },
  2837. },
  2838. serverSideLists: map[IdentScreenName]buddyList{
  2839. NewIdentScreenName("me"): {
  2840. privacyMode: wire.FeedbagPDModeDenySome,
  2841. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  2842. permitList: []IdentScreenName{},
  2843. denyList: []IdentScreenName{NewIdentScreenName("them")},
  2844. },
  2845. },
  2846. expect: []Relationship{
  2847. {
  2848. User: NewIdentScreenName("them"),
  2849. BlocksYou: true,
  2850. YouBlock: true,
  2851. IsOnTheirList: true,
  2852. IsOnYourList: true,
  2853. },
  2854. },
  2855. },
  2856. {
  2857. name: "[me, server-side]: Block the users Below [them, server-side]: Block the users Below",
  2858. me: NewIdentScreenName("me"),
  2859. clientSideLists: map[IdentScreenName]buddyList{},
  2860. serverSideLists: map[IdentScreenName]buddyList{
  2861. NewIdentScreenName("me"): {
  2862. privacyMode: wire.FeedbagPDModeDenySome,
  2863. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  2864. permitList: []IdentScreenName{},
  2865. denyList: []IdentScreenName{NewIdentScreenName("them")},
  2866. },
  2867. NewIdentScreenName("them"): {
  2868. privacyMode: wire.FeedbagPDModeDenySome,
  2869. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  2870. permitList: []IdentScreenName{},
  2871. denyList: []IdentScreenName{NewIdentScreenName("me")},
  2872. },
  2873. },
  2874. expect: []Relationship{
  2875. {
  2876. User: NewIdentScreenName("them"),
  2877. BlocksYou: true,
  2878. YouBlock: true,
  2879. IsOnTheirList: true,
  2880. IsOnYourList: true,
  2881. },
  2882. },
  2883. },
  2884. {
  2885. name: "(with filter) [me, client-side]: Allow all users to contact me [them, client-side]: Allow all users to contact me",
  2886. me: NewIdentScreenName("me"),
  2887. clientSideLists: map[IdentScreenName]buddyList{
  2888. NewIdentScreenName("me"): {
  2889. privacyMode: wire.FeedbagPDModePermitAll,
  2890. buddyList: []IdentScreenName{
  2891. NewIdentScreenName("them-1"),
  2892. NewIdentScreenName("them-2"),
  2893. },
  2894. permitList: []IdentScreenName{},
  2895. denyList: []IdentScreenName{},
  2896. },
  2897. NewIdentScreenName("them-1"): {
  2898. privacyMode: wire.FeedbagPDModePermitAll,
  2899. buddyList: []IdentScreenName{},
  2900. permitList: []IdentScreenName{},
  2901. denyList: []IdentScreenName{},
  2902. },
  2903. NewIdentScreenName("them-2"): {
  2904. privacyMode: wire.FeedbagPDModePermitAll,
  2905. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  2906. permitList: []IdentScreenName{},
  2907. denyList: []IdentScreenName{},
  2908. },
  2909. NewIdentScreenName("them-3"): {
  2910. privacyMode: wire.FeedbagPDModePermitAll,
  2911. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  2912. permitList: []IdentScreenName{},
  2913. denyList: []IdentScreenName{},
  2914. },
  2915. },
  2916. serverSideLists: map[IdentScreenName]buddyList{},
  2917. filter: []IdentScreenName{
  2918. NewIdentScreenName("them-3"),
  2919. NewIdentScreenName("them-1"),
  2920. },
  2921. expect: []Relationship{
  2922. {
  2923. User: NewIdentScreenName("them-1"),
  2924. BlocksYou: false,
  2925. YouBlock: false,
  2926. IsOnTheirList: false,
  2927. IsOnYourList: true,
  2928. },
  2929. {
  2930. User: NewIdentScreenName("them-3"),
  2931. BlocksYou: false,
  2932. YouBlock: false,
  2933. IsOnTheirList: true,
  2934. IsOnYourList: false,
  2935. },
  2936. },
  2937. },
  2938. {
  2939. name: "(filtered) [me, server-side]: Allow all users to contact me [them, server-side]: Allow all users to contact me",
  2940. me: NewIdentScreenName("me"),
  2941. clientSideLists: map[IdentScreenName]buddyList{},
  2942. serverSideLists: map[IdentScreenName]buddyList{
  2943. NewIdentScreenName("me"): {
  2944. privacyMode: wire.FeedbagPDModePermitAll,
  2945. buddyList: []IdentScreenName{
  2946. NewIdentScreenName("them-1"),
  2947. NewIdentScreenName("them-2"),
  2948. },
  2949. permitList: []IdentScreenName{},
  2950. denyList: []IdentScreenName{},
  2951. },
  2952. NewIdentScreenName("them-1"): {
  2953. privacyMode: wire.FeedbagPDModePermitAll,
  2954. buddyList: []IdentScreenName{},
  2955. permitList: []IdentScreenName{},
  2956. denyList: []IdentScreenName{},
  2957. },
  2958. NewIdentScreenName("them-2"): {
  2959. privacyMode: wire.FeedbagPDModePermitAll,
  2960. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  2961. permitList: []IdentScreenName{},
  2962. denyList: []IdentScreenName{},
  2963. },
  2964. NewIdentScreenName("them-3"): {
  2965. privacyMode: wire.FeedbagPDModePermitAll,
  2966. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  2967. permitList: []IdentScreenName{},
  2968. denyList: []IdentScreenName{},
  2969. },
  2970. },
  2971. filter: []IdentScreenName{
  2972. NewIdentScreenName("them-1"),
  2973. NewIdentScreenName("them-3"),
  2974. },
  2975. expect: []Relationship{
  2976. {
  2977. User: NewIdentScreenName("them-1"),
  2978. BlocksYou: false,
  2979. YouBlock: false,
  2980. IsOnTheirList: false,
  2981. IsOnYourList: true,
  2982. },
  2983. {
  2984. User: NewIdentScreenName("them-3"),
  2985. BlocksYou: false,
  2986. YouBlock: false,
  2987. IsOnTheirList: true,
  2988. IsOnYourList: false,
  2989. },
  2990. },
  2991. },
  2992. {
  2993. name: "i have a temp buddy, they don't have me",
  2994. me: NewIdentScreenName("me"),
  2995. clientSideLists: map[IdentScreenName]buddyList{
  2996. NewIdentScreenName("friend1"): {
  2997. privacyMode: wire.FeedbagPDModePermitAll,
  2998. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  2999. permitList: []IdentScreenName{},
  3000. denyList: []IdentScreenName{},
  3001. },
  3002. },
  3003. serverSideLists: map[IdentScreenName]buddyList{
  3004. NewIdentScreenName("me"): {
  3005. privacyMode: wire.FeedbagPDModePermitAll,
  3006. buddyList: []IdentScreenName{NewIdentScreenName("friend1")},
  3007. permitList: []IdentScreenName{},
  3008. denyList: []IdentScreenName{},
  3009. },
  3010. NewIdentScreenName("friend2"): {
  3011. privacyMode: wire.FeedbagPDModePermitAll,
  3012. buddyList: []IdentScreenName{},
  3013. permitList: []IdentScreenName{},
  3014. denyList: []IdentScreenName{},
  3015. },
  3016. },
  3017. tempBuddyList: map[IdentScreenName][]IdentScreenName{
  3018. NewIdentScreenName("me"): {
  3019. NewIdentScreenName("friend2"),
  3020. },
  3021. },
  3022. expect: []Relationship{
  3023. {
  3024. User: NewIdentScreenName("friend1"),
  3025. BlocksYou: false,
  3026. YouBlock: false,
  3027. IsOnTheirList: true,
  3028. IsOnYourList: true,
  3029. },
  3030. {
  3031. User: NewIdentScreenName("friend2"),
  3032. BlocksYou: false,
  3033. YouBlock: false,
  3034. IsOnTheirList: false,
  3035. IsOnYourList: true,
  3036. },
  3037. },
  3038. },
  3039. {
  3040. name: "someone has me as a temp buddy, I don't have them",
  3041. me: NewIdentScreenName("me"),
  3042. clientSideLists: map[IdentScreenName]buddyList{
  3043. NewIdentScreenName("friend1"): {
  3044. privacyMode: wire.FeedbagPDModePermitAll,
  3045. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  3046. permitList: []IdentScreenName{},
  3047. denyList: []IdentScreenName{},
  3048. },
  3049. },
  3050. serverSideLists: map[IdentScreenName]buddyList{
  3051. NewIdentScreenName("me"): {
  3052. privacyMode: wire.FeedbagPDModePermitAll,
  3053. buddyList: []IdentScreenName{NewIdentScreenName("friend1")},
  3054. permitList: []IdentScreenName{},
  3055. denyList: []IdentScreenName{},
  3056. },
  3057. NewIdentScreenName("friend2"): {
  3058. privacyMode: wire.FeedbagPDModePermitAll,
  3059. buddyList: []IdentScreenName{},
  3060. permitList: []IdentScreenName{},
  3061. denyList: []IdentScreenName{},
  3062. },
  3063. },
  3064. tempBuddyList: map[IdentScreenName][]IdentScreenName{
  3065. NewIdentScreenName("friend2"): {
  3066. NewIdentScreenName("me"),
  3067. },
  3068. },
  3069. expect: []Relationship{
  3070. {
  3071. User: NewIdentScreenName("friend1"),
  3072. BlocksYou: false,
  3073. YouBlock: false,
  3074. IsOnTheirList: true,
  3075. IsOnYourList: true,
  3076. },
  3077. {
  3078. User: NewIdentScreenName("friend2"),
  3079. BlocksYou: false,
  3080. YouBlock: false,
  3081. IsOnTheirList: true,
  3082. IsOnYourList: false,
  3083. },
  3084. },
  3085. },
  3086. {
  3087. name: "I have a temp buddy that I've blocked",
  3088. me: NewIdentScreenName("me"),
  3089. clientSideLists: map[IdentScreenName]buddyList{
  3090. NewIdentScreenName("friend1"): {
  3091. privacyMode: wire.FeedbagPDModePermitAll,
  3092. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  3093. permitList: []IdentScreenName{},
  3094. denyList: []IdentScreenName{},
  3095. },
  3096. },
  3097. serverSideLists: map[IdentScreenName]buddyList{
  3098. NewIdentScreenName("me"): {
  3099. privacyMode: wire.FeedbagPDModeDenySome,
  3100. buddyList: []IdentScreenName{NewIdentScreenName("friend1")},
  3101. permitList: []IdentScreenName{},
  3102. denyList: []IdentScreenName{NewIdentScreenName("friend2")},
  3103. },
  3104. NewIdentScreenName("friend2"): {
  3105. privacyMode: wire.FeedbagPDModePermitAll,
  3106. buddyList: []IdentScreenName{},
  3107. permitList: []IdentScreenName{},
  3108. denyList: []IdentScreenName{},
  3109. },
  3110. },
  3111. tempBuddyList: map[IdentScreenName][]IdentScreenName{
  3112. NewIdentScreenName("me"): {
  3113. NewIdentScreenName("friend2"),
  3114. },
  3115. },
  3116. expect: []Relationship{
  3117. {
  3118. User: NewIdentScreenName("friend1"),
  3119. BlocksYou: false,
  3120. YouBlock: false,
  3121. IsOnTheirList: true,
  3122. IsOnYourList: true,
  3123. },
  3124. {
  3125. User: NewIdentScreenName("friend2"),
  3126. BlocksYou: false,
  3127. YouBlock: true,
  3128. IsOnTheirList: false,
  3129. IsOnYourList: true,
  3130. },
  3131. },
  3132. },
  3133. {
  3134. name: "feedbag server-side: I have a buddy that I have not yet authorized, don't show on list",
  3135. me: NewIdentScreenName("me"),
  3136. clientSideLists: map[IdentScreenName]buddyList{},
  3137. serverSideLists: map[IdentScreenName]buddyList{
  3138. NewIdentScreenName("me"): {
  3139. privacyMode: wire.FeedbagPDModePermitAll,
  3140. buddyList: []IdentScreenName{NewIdentScreenName("them")},
  3141. buddyPendingAuth: []IdentScreenName{NewIdentScreenName("them")},
  3142. permitList: []IdentScreenName{},
  3143. denyList: []IdentScreenName{},
  3144. },
  3145. NewIdentScreenName("them"): {
  3146. privacyMode: wire.FeedbagPDModePermitAll,
  3147. buddyList: []IdentScreenName{},
  3148. permitList: []IdentScreenName{},
  3149. denyList: []IdentScreenName{},
  3150. },
  3151. },
  3152. expect: []Relationship{
  3153. {
  3154. User: NewIdentScreenName("them"),
  3155. BlocksYou: false,
  3156. YouBlock: false,
  3157. IsOnTheirList: false,
  3158. IsOnYourList: false,
  3159. },
  3160. },
  3161. },
  3162. {
  3163. name: "feedbag server-side: A user has me on their list and I have not yet authorized them, don't show on list",
  3164. me: NewIdentScreenName("me"),
  3165. clientSideLists: map[IdentScreenName]buddyList{},
  3166. serverSideLists: map[IdentScreenName]buddyList{
  3167. NewIdentScreenName("me"): {
  3168. privacyMode: wire.FeedbagPDModePermitAll,
  3169. buddyList: []IdentScreenName{},
  3170. buddyPendingAuth: []IdentScreenName{},
  3171. permitList: []IdentScreenName{},
  3172. denyList: []IdentScreenName{},
  3173. },
  3174. NewIdentScreenName("them"): {
  3175. privacyMode: wire.FeedbagPDModePermitAll,
  3176. buddyList: []IdentScreenName{NewIdentScreenName("me")},
  3177. buddyPendingAuth: []IdentScreenName{NewIdentScreenName("me")},
  3178. permitList: []IdentScreenName{},
  3179. denyList: []IdentScreenName{},
  3180. },
  3181. },
  3182. expect: []Relationship{
  3183. {
  3184. User: NewIdentScreenName("them"),
  3185. BlocksYou: false,
  3186. YouBlock: false,
  3187. IsOnTheirList: false,
  3188. IsOnYourList: false,
  3189. },
  3190. },
  3191. },
  3192. }
  3193. for _, tt := range tests {
  3194. t.Run(tt.name, func(t *testing.T) {
  3195. defer func() {
  3196. _ = os.Remove(testFile)
  3197. }()
  3198. feedbagStore, err := NewSQLiteUserStore(testFile)
  3199. assert.NoError(t, err)
  3200. for sn, list := range tt.clientSideLists {
  3201. assert.NoError(t, feedbagStore.SetPDMode(context.Background(), sn, list.privacyMode))
  3202. for _, buddy := range list.buddyList {
  3203. assert.NoError(t, feedbagStore.AddBuddy(context.Background(), sn, buddy))
  3204. }
  3205. for _, buddy := range list.permitList {
  3206. assert.NoError(t, feedbagStore.PermitBuddy(context.Background(), sn, buddy))
  3207. }
  3208. for _, buddy := range list.denyList {
  3209. assert.NoError(t, feedbagStore.DenyBuddy(context.Background(), sn, buddy))
  3210. }
  3211. }
  3212. for sn, list := range tt.serverSideLists {
  3213. insertTestUsers(t, feedbagStore, sn)
  3214. assert.NoError(t, feedbagStore.UseFeedbag(context.Background(), sn))
  3215. itemID := uint16(1)
  3216. items := []wire.FeedbagItem{
  3217. pdInfoItem(itemID, list.privacyMode),
  3218. }
  3219. itemID++
  3220. for _, buddy := range list.buddyList {
  3221. items = append(items, newFeedbagItem(
  3222. wire.FeedbagClassIdBuddy,
  3223. itemID,
  3224. buddy.String(),
  3225. slices.Contains(list.buddyPendingAuth, buddy),
  3226. ))
  3227. itemID++
  3228. }
  3229. for _, buddy := range list.permitList {
  3230. items = append(items, newFeedbagItem(wire.FeedbagClassIDPermit, itemID, buddy.String(), false))
  3231. itemID++
  3232. }
  3233. for _, buddy := range list.denyList {
  3234. items = append(items, newFeedbagItem(wire.FeedbagClassIDDeny, itemID, buddy.String(), false))
  3235. itemID++
  3236. }
  3237. assert.NoError(t, feedbagStore.FeedbagUpsert(context.Background(), sn, items))
  3238. }
  3239. for sn, list := range tt.tempBuddyList {
  3240. for _, buddy := range list {
  3241. assert.NoError(t, feedbagStore.AddBuddy(context.Background(), sn, buddy))
  3242. }
  3243. }
  3244. have, err := feedbagStore.AllRelationships(context.Background(), tt.me, tt.filter)
  3245. assert.NoError(t, err)
  3246. assert.ElementsMatch(t, tt.expect, have)
  3247. })
  3248. }
  3249. }