1+ package org .buddycloud .channelserver .packetprocessor .iq .namespace .pubsub .get ;
2+
3+ import java .util .ArrayList ;
4+ import java .util .List ;
5+ import java .util .concurrent .BlockingQueue ;
6+ import java .util .concurrent .LinkedBlockingQueue ;
7+
8+ import junit .framework .Assert ;
9+
10+ import org .buddycloud .channelserver .Configuration ;
11+ import org .buddycloud .channelserver .channel .ChannelManager ;
12+ import org .buddycloud .channelserver .packetHandler .iq .IQTestHandler ;
13+ import org .buddycloud .channelserver .packetprocessor .iq .namespace .pubsub .JabberPubsub ;
14+ import org .buddycloud .channelserver .packetprocessor .iq .namespace .pubsub .PubSubElementProcessor ;
15+ import org .buddycloud .channelserver .pubsub .affiliation .Affiliations ;
16+ import org .buddycloud .channelserver .pubsub .model .NodeMembership ;
17+ import org .buddycloud .channelserver .pubsub .model .impl .NodeMembershipImpl ;
18+ import org .buddycloud .channelserver .pubsub .subscription .Subscriptions ;
19+ import org .dom4j .Element ;
20+ import org .dom4j .tree .BaseElement ;
21+ import org .junit .Before ;
22+ import org .junit .Test ;
23+ import org .mockito .Mockito ;
24+ import org .xmpp .packet .IQ ;
25+ import org .xmpp .packet .JID ;
26+ import org .xmpp .packet .Packet ;
27+ import org .xmpp .resultsetmanagement .ResultSetImpl ;
28+
29+ public class AffiliationsGetTest extends IQTestHandler {
30+
31+ private IQ userRequest ;
32+ private IQ nodeRequest ;
33+ private AffiliationsGet affiliationsGet ;
34+ private Element element ;
35+ private BlockingQueue <Packet > queue = new LinkedBlockingQueue <Packet >();
36+
37+ private String node = "/user/pamela@denmark.lit/posts" ;
38+ private JID jid = new JID ("juliet@shakespeare.lit" );
39+ private JID invitedBy = new JID ("romeo@shakespeare.lit" );
40+
41+ private ChannelManager channelManager ;
42+
43+ @ Before
44+ public void setUp () throws Exception {
45+
46+ queue = new LinkedBlockingQueue <Packet >();
47+ affiliationsGet = new AffiliationsGet (queue , channelManager );
48+ element = new BaseElement ("affiliations" );
49+
50+ channelManager = Mockito .mock (ChannelManager .class );
51+ Configuration .getInstance ().putProperty (Configuration .CONFIGURATION_LOCAL_DOMAIN_CHECKER , Boolean .TRUE .toString ());
52+
53+ NodeMembership nodeMembership = new NodeMembershipImpl (node , jid , Subscriptions .subscribed , Affiliations .member , null );
54+ Mockito .when (channelManager .getNodeMembership (Mockito .anyString (), Mockito .any (JID .class ))).thenReturn (nodeMembership );
55+
56+ affiliationsGet .setChannelManager (channelManager );
57+
58+ Configuration .getInstance ().putProperty (
59+ Configuration .CONFIGURATION_SERVER_DOMAIN , "shakespeare.lit" );
60+ Configuration .getInstance ().putProperty (
61+ Configuration .CONFIGURATION_SERVER_TOPICS_DOMAIN ,
62+ "topics.shakespeare.lit" );
63+ Configuration .getInstance ().remove (
64+ Configuration .CONFIGURATION_LOCAL_DOMAIN_CHECKER );
65+
66+ userRequest = readStanzaAsIq ("/iq/pubsub/affiliations/request-no-node.stanza" );
67+ nodeRequest = readStanzaAsIq ("/iq/pubsub/affiliations/request-with-node.stanza" );
68+
69+ Mockito .when (channelManager .isCachedJID (Mockito .any (JID .class ))).thenReturn (true );
70+ }
71+
72+ @ Test
73+ public void passingAffiliationsAsElementNameReturnsTrue () {
74+ Assert .assertTrue (affiliationsGet .accept (element ));
75+ }
76+
77+ @ Test
78+ public void passingNotAffiliationsAsElementNameReturnsFalse () {
79+ Element element = new BaseElement ("not-affiliations" );
80+ Assert .assertFalse (affiliationsGet .accept (element ));
81+ }
82+
83+ @ Test
84+ public void remoteNodeForwardsStanza () throws Exception {
85+
86+ Mockito .when (channelManager .isCachedNode (Mockito .anyString ())).thenReturn (false );
87+ Configuration .getInstance ().putProperty (
88+ Configuration .CONFIGURATION_SERVER_DOMAIN , "denmark.lit" );
89+
90+ affiliationsGet .process (element , jid , nodeRequest , null );
91+
92+ IQ response = (IQ ) queue .poll ();
93+
94+ Assert .assertEquals (IQ .Type .get , response .getType ());
95+ Assert .assertEquals (new JID ("shakespeare.lit" ), response .getTo ());
96+ Assert .assertEquals (nodeRequest .getID (), response .getID ());
97+ }
98+
99+ @ Test
100+ public void remoteJIDForwardsStanza () throws Exception {
101+
102+ Configuration .getInstance ().putProperty (
103+ Configuration .CONFIGURATION_SERVER_DOMAIN , "denmark.lit" );
104+
105+ Mockito .when (channelManager .isCachedJID (Mockito .any (JID .class ))).thenReturn (false );
106+ affiliationsGet .process (element , jid , userRequest , null );
107+
108+ IQ response = (IQ ) queue .poll ();
109+
110+ Assert .assertEquals (IQ .Type .get , response .getType ());
111+ Assert .assertEquals (new JID ("shakespeare.lit" ), response .getTo ());
112+ Assert .assertEquals (userRequest .getID (), response .getID ());
113+ }
114+
115+ /*
116+ * NODE AFFILIATIONS
117+ */
118+
119+ @ Test
120+ public void returnsAListOfNodeAffiliations () throws Exception {
121+
122+ List <NodeMembership > members = new ArrayList <NodeMembership >();
123+ members .add (new NodeMembershipImpl (node , jid , Subscriptions .subscribed , Affiliations .publisher , invitedBy ));
124+
125+ Mockito .when (channelManager .getNodeMemberships (Mockito .anyString ())).thenReturn (new ResultSetImpl <NodeMembership >(members ));
126+
127+ affiliationsGet .process (element , jid , nodeRequest , null );
128+
129+ Assert .assertEquals (1 , queue .size ());
130+
131+ IQ response = (IQ ) queue .poll ();
132+
133+ Assert .assertEquals (IQ .Type .result , response .getType ());
134+ Assert .assertEquals (new JID ("francisco@shakespeare.lit/barracks" ), response .getTo ());
135+ Assert .assertEquals (nodeRequest .getID (), response .getID ());
136+
137+ Element pubsub = response .getElement ().element ("pubsub" );
138+ Assert .assertNotNull (pubsub );
139+ Assert .assertEquals (JabberPubsub .NAMESPACE_URI , pubsub .getNamespaceURI ());
140+ Element affiliations = pubsub .element ("affiliations" );
141+ Assert .assertNotNull (affiliations );
142+ Assert .assertEquals (1 , affiliations .elements ("affiliation" ).size ());
143+
144+ Element affiliation = affiliations .element ("affiliation" );
145+
146+ Assert .assertEquals (node , affiliation .attributeValue ("node" ));
147+ Assert .assertEquals (Affiliations .publisher .toString (), affiliation .attributeValue ("affiliation" ));
148+ Assert .assertEquals (jid .toBareJID (), affiliation .attributeValue ("jid" ));
149+ }
150+
151+ @ Test
152+ public void nodeAffiliationsDoesNotIncludeInvitedPendingNoneByDefault () throws Exception {
153+
154+ List <NodeMembership > members = new ArrayList <NodeMembership >();
155+ members .add (new NodeMembershipImpl (node , invitedBy , Subscriptions .pending , Affiliations .publisher , invitedBy ));
156+ members .add (new NodeMembershipImpl (node , invitedBy , Subscriptions .none , Affiliations .publisher , invitedBy ));
157+ members .add (new NodeMembershipImpl (node , invitedBy , Subscriptions .invited , Affiliations .publisher , invitedBy ));
158+
159+ Mockito .when (channelManager .getNodeMemberships (Mockito .anyString ())).thenReturn (new ResultSetImpl <NodeMembership >(members ));
160+
161+ affiliationsGet .process (element , jid , nodeRequest , null );
162+
163+ Assert .assertEquals (1 , queue .size ());
164+
165+ IQ response = (IQ ) queue .poll ();
166+
167+ Element pubsub = response .getElement ().element ("pubsub" );
168+ Element affiliations = pubsub .element ("affiliations" );
169+ Assert .assertEquals (0 , affiliations .elements ("affiliation" ).size ());
170+
171+ }
172+
173+ @ Test
174+ public void nodeAffiliationsIncludesInvitedAndPendingIfUser () throws Exception {
175+
176+ List <NodeMembership > members = new ArrayList <NodeMembership >();
177+ members .add (new NodeMembershipImpl (node , jid , Subscriptions .invited , Affiliations .publisher , invitedBy ));
178+ members .add (new NodeMembershipImpl (node , jid , Subscriptions .pending , Affiliations .publisher , invitedBy ));
179+ members .add (new NodeMembershipImpl (node , jid , Subscriptions .none , Affiliations .publisher , invitedBy ));
180+
181+ Mockito .when (channelManager .getNodeMemberships (Mockito .anyString ())).thenReturn (new ResultSetImpl <NodeMembership >(members ));
182+
183+ affiliationsGet .process (element , jid , nodeRequest , null );
184+
185+ Assert .assertEquals (1 , queue .size ());
186+
187+ IQ response = (IQ ) queue .poll ();
188+
189+ Element pubsub = response .getElement ().element ("pubsub" );
190+ Element affiliations = pubsub .element ("affiliations" );
191+ Assert .assertEquals (2 , affiliations .elements ("affiliation" ).size ());
192+
193+ /* Includes invited by details */
194+ Assert .assertEquals (invitedBy .toBareJID (), affiliations .element ("affiliation" ).attributeValue ("invited-by" ));
195+
196+ }
197+
198+ @ Test
199+ public void nodeAffiliationsIncludesInvitedAndPendingIfOwner () throws Exception {
200+
201+ NodeMembership nodeMembership = new NodeMembershipImpl (node , jid , Subscriptions .subscribed , Affiliations .owner , null );
202+ Mockito .when (channelManager .getNodeMembership (Mockito .anyString (), Mockito .any (JID .class ))).thenReturn (nodeMembership );
203+
204+ List <NodeMembership > members = new ArrayList <NodeMembership >();
205+ members .add (new NodeMembershipImpl (node , jid , Subscriptions .invited , Affiliations .publisher , invitedBy ));
206+ members .add (new NodeMembershipImpl (node , jid , Subscriptions .pending , Affiliations .publisher , invitedBy ));
207+ members .add (new NodeMembershipImpl (node , jid , Subscriptions .none , Affiliations .publisher , invitedBy ));
208+
209+ Mockito .when (channelManager .getNodeMemberships (Mockito .anyString ())).thenReturn (new ResultSetImpl <NodeMembership >(members ));
210+
211+ affiliationsGet .process (element , invitedBy , nodeRequest , null );
212+
213+ Assert .assertEquals (1 , queue .size ());
214+
215+ IQ response = (IQ ) queue .poll ();
216+
217+ Element pubsub = response .getElement ().element ("pubsub" );
218+ Element affiliations = pubsub .element ("affiliations" );
219+ Assert .assertEquals (2 , affiliations .elements ("affiliation" ).size ());
220+
221+ /* Includes invited by details */
222+ Assert .assertEquals (invitedBy .toBareJID (), affiliations .element ("affiliation" ).attributeValue ("invited-by" ));
223+
224+ }
225+
226+ @ Test
227+ public void nodeAffiliationsIncludesInvitedAndPendingIfModerator () throws Exception {
228+
229+ NodeMembership nodeMembership = new NodeMembershipImpl (node , jid , Subscriptions .subscribed , Affiliations .moderator , null );
230+ Mockito .when (channelManager .getNodeMembership (Mockito .anyString (), Mockito .any (JID .class ))).thenReturn (nodeMembership );
231+
232+ List <NodeMembership > members = new ArrayList <NodeMembership >();
233+ members .add (new NodeMembershipImpl (node , jid , Subscriptions .invited , Affiliations .publisher , invitedBy ));
234+ members .add (new NodeMembershipImpl (node , jid , Subscriptions .pending , Affiliations .publisher , invitedBy ));
235+ members .add (new NodeMembershipImpl (node , jid , Subscriptions .none , Affiliations .publisher , invitedBy ));
236+
237+ Mockito .when (channelManager .getNodeMemberships (Mockito .anyString ())).thenReturn (new ResultSetImpl <NodeMembership >(members ));
238+
239+ affiliationsGet .process (element , invitedBy , nodeRequest , null );
240+
241+ Assert .assertEquals (1 , queue .size ());
242+
243+ IQ response = (IQ ) queue .poll ();
244+
245+ Element pubsub = response .getElement ().element ("pubsub" );
246+ Element affiliations = pubsub .element ("affiliations" );
247+ Assert .assertEquals (2 , affiliations .elements ("affiliation" ).size ());
248+
249+ /* Includes invited by details */
250+ Assert .assertEquals (invitedBy .toBareJID (), affiliations .element ("affiliation" ).attributeValue ("invited-by" ));
251+
252+ }
253+
254+
255+ /*
256+ * USER AFFILIATIONS
257+ */
258+
259+ @ Test
260+ public void returnsAListOfUserAffiliations () throws Exception {
261+
262+ List <NodeMembership > members = new ArrayList <NodeMembership >();
263+ members .add (new NodeMembershipImpl (node , jid , Subscriptions .subscribed , Affiliations .publisher , invitedBy ));
264+
265+ Mockito .when (channelManager .getUserMemberships (Mockito .any (JID .class ))).thenReturn (new ResultSetImpl <NodeMembership >(members ));
266+
267+ affiliationsGet .process (element , jid , userRequest , null );
268+
269+ Assert .assertEquals (1 , queue .size ());
270+
271+ IQ response = (IQ ) queue .poll ();
272+
273+ Assert .assertEquals (IQ .Type .result , response .getType ());
274+ Assert .assertEquals (new JID ("francisco@shakespeare.lit/barracks" ), response .getTo ());
275+ Assert .assertEquals (nodeRequest .getID (), response .getID ());
276+
277+ Element pubsub = response .getElement ().element ("pubsub" );
278+ Assert .assertNotNull (pubsub );
279+ Assert .assertEquals (JabberPubsub .NS_PUBSUB_OWNER , pubsub .getNamespaceURI ());
280+ Element affiliations = pubsub .element ("affiliations" );
281+ Assert .assertNotNull (affiliations );
282+ Assert .assertEquals (1 , affiliations .elements ("affiliation" ).size ());
283+
284+ Element affiliation = affiliations .element ("affiliation" );
285+
286+ Assert .assertEquals (node , affiliation .attributeValue ("node" ));
287+ Assert .assertEquals (Affiliations .publisher .toString (), affiliation .attributeValue ("affiliation" ));
288+ Assert .assertEquals (jid .toBareJID (), affiliation .attributeValue ("jid" ));
289+ }
290+
291+ @ Test
292+ public void userAffiliationsDoesNotIncludeInvitedNoneByDefault () throws Exception {
293+
294+ List <NodeMembership > members = new ArrayList <NodeMembership >();
295+ members .add (new NodeMembershipImpl (node , invitedBy , Subscriptions .none , Affiliations .publisher , invitedBy ));
296+
297+ Mockito .when (channelManager .getUserMemberships (Mockito .any (JID .class ))).thenReturn (new ResultSetImpl <NodeMembership >(members ));
298+
299+ affiliationsGet .process (element , jid , userRequest , null );
300+
301+ Assert .assertEquals (1 , queue .size ());
302+
303+ IQ response = (IQ ) queue .poll ();
304+
305+ Element pubsub = response .getElement ().element ("pubsub" );
306+ Element affiliations = pubsub .element ("affiliations" );
307+ Assert .assertEquals (0 , affiliations .elements ("affiliation" ).size ());
308+
309+ }
310+
311+ @ Test
312+ public void addsInvitedByDetailsIfSubscriptionIsInvited () throws Exception {
313+
314+ List <NodeMembership > members = new ArrayList <NodeMembership >();
315+ members .add (new NodeMembershipImpl (node , jid , Subscriptions .invited , Affiliations .publisher , invitedBy ));
316+ members .add (new NodeMembershipImpl (node , jid , Subscriptions .subscribed , Affiliations .publisher , invitedBy ));
317+
318+ Mockito .when (channelManager .getUserMemberships (Mockito .any (JID .class ))).thenReturn (new ResultSetImpl <NodeMembership >(members ));
319+
320+ affiliationsGet .process (element , jid , userRequest , null );
321+
322+ Assert .assertEquals (1 , queue .size ());
323+
324+ IQ response = (IQ ) queue .poll ();
325+
326+ Element pubsub = response .getElement ().element ("pubsub" );
327+ Element affiliations = pubsub .element ("affiliations" );
328+ Assert .assertEquals (2 , affiliations .elements ("affiliation" ).size ());
329+
330+ /* Includes invited by details */
331+ Assert .assertEquals (invitedBy .toBareJID (), ((Element ) affiliations .elements ("affiliation" ).get (0 )).attributeValue ("invited-by" ));
332+ Assert .assertNull (((Element ) affiliations .elements ("affiliation" ).get (1 )).attribute ("invited-by" ));
333+ }
334+
335+ }
0 commit comments