1   package com.atlassian.core.ofbiz.association;
2   
3   import junit.framework.TestCase;
4   import com.atlassian.core.ofbiz.test.mock.MockGenericValue;
5   import com.atlassian.core.util.collection.EasyList;
6   
7   import java.util.List;
8   import java.util.Map;
9   import java.util.Collections;
10  
11  import org.ofbiz.core.entity.GenericEntityException;
12  
13  public class TestDefaultAssociationManager extends TestCase
14  {
15      private static class LocalBoolean
16      {
17          private boolean value;
18  
19          private LocalBoolean(final boolean value)
20          {
21              this.value = value;
22          }
23  
24          public boolean get()
25          {
26              return value;
27          }
28  
29          public void set(final boolean value)
30          {
31              this.value = value;
32          }
33  
34      }
35  
36  
37      public void testGetUsernamesFromSinkNullSink() throws Exception
38      {
39          try
40          {
41              new DefaultAssociationManager().getUsernamesFromSink(null, null, false, false);
42          }
43          catch (IllegalArgumentException e)
44          {
45              // expected
46          }
47      }
48  
49      public void testGetUsernamesFromSinkNoResults() throws Exception
50      {
51          final LocalBoolean methodCalled = new LocalBoolean(false);
52  
53          final MockGenericValue sink = new MockGenericValue("name");
54          sink.set("id", new Long(123));
55  
56          final String associationType = "type";
57          final boolean useCache = true;
58          final boolean useSequence = false;
59  
60          DefaultAssociationManager manager = new DefaultAssociationManager()
61          {
62              List getAssociations(String associationName, Map fields, boolean uc, boolean us)
63                      throws GenericEntityException
64              {
65                  methodCalled.set(true);
66                  assertEquals("UserAssociation", associationName);
67                  assertNotNull(fields);
68                  assertEquals(3, fields.size());
69                  assertTrue(fields.containsKey("sinkNodeId"));
70                  assertTrue(fields.containsKey("sinkNodeEntity"));
71                  assertTrue(fields.containsKey("associationType"));
72                  assertEquals(new Long(123), fields.get("sinkNodeId"));
73                  assertEquals("name", fields.get("sinkNodeEntity"));
74                  assertEquals(associationType, fields.get("associationType"));
75                  assertEquals(useCache, uc);
76                  assertEquals(useSequence, us);
77                  return Collections.EMPTY_LIST;
78              }
79          };
80          final List usernames = manager.getUsernamesFromSink(sink, associationType, useCache, useSequence);
81          assertNotNull(usernames);
82          assertTrue(usernames.isEmpty());
83          assertTrue(methodCalled.get());
84      }
85  
86      public void testGetUsernamesFromSink() throws Exception
87      {
88          final String username = "fred";
89  
90          final LocalBoolean methodCalled = new LocalBoolean(false);
91  
92          final MockGenericValue sink = new MockGenericValue("name");
93          sink.set("id", new Long(123));
94  
95          final String associationType = "type";
96          final boolean useCache = true;
97          final boolean useSequence = false;
98  
99          DefaultAssociationManager manager = new DefaultAssociationManager()
100         {
101             List getAssociations(String associationName, Map fields, boolean uc, boolean us)
102                     throws GenericEntityException
103             {
104                 methodCalled.set(true);
105                 assertEquals("UserAssociation", associationName);
106                 assertNotNull(fields);
107                 assertEquals(3, fields.size());
108                 assertTrue(fields.containsKey("sinkNodeId"));
109                 assertTrue(fields.containsKey("sinkNodeEntity"));
110                 assertTrue(fields.containsKey("associationType"));
111                 assertEquals(new Long(123), fields.get("sinkNodeId"));
112                 assertEquals("name", fields.get("sinkNodeEntity"));
113                 assertEquals(associationType, fields.get("associationType"));
114                 assertEquals(useCache, uc);
115                 assertEquals(useSequence, us);
116 
117                 final MockGenericValue association = new MockGenericValue("assoc");
118                 association.setString("sourceName", username);
119                 return EasyList.build(association);
120             }
121         };
122         final List usernames = manager.getUsernamesFromSink(sink, associationType, useCache, useSequence);
123         assertNotNull(usernames);
124         assertFalse(usernames.isEmpty());
125         assertEquals(username, usernames.get(0));
126         assertTrue(methodCalled.get());
127     }
128 
129 
130 }