1 package org.melati.poem.test;
2
3 import java.util.Enumeration;
4
5 import org.melati.poem.AccessPoemException;
6 import org.melati.poem.Capability;
7 import org.melati.poem.Column;
8 import org.melati.poem.FieldSet;
9 import org.melati.poem.PoemTask;
10 import org.melati.poem.PoemThread;
11 import org.melati.poem.PreparedTailoredQuery;
12 import org.melati.poem.Table;
13 import org.melati.poem.util.EnumUtils;
14
15
16
17
18
19
20 public class PreparedTailoredQueryTest extends EverythingTestCase {
21
22 public PreparedTailoredQueryTest(String name) {
23 super(name);
24 }
25
26 protected void setUp() throws Exception {
27 super.setUp();
28 }
29
30 protected void tearDown() throws Exception {
31 super.tearDown();
32 }
33
34
35
36
37 public void testSelection() {
38 EverythingDatabase db = (EverythingDatabase)getDb();
39 Capability spyMaster = db.getCapabilityTable().ensure("spyMaster");
40 final Capability moneyPenny = db.getCapabilityTable().ensure("moneyPenny");
41
42 User spy = (User)db.getUserTable().newPersistent();
43 spy.setLogin("spy");
44 spy.setName("Spy");
45 spy.setPassword("spy");
46 spy.makePersistent();
47
48 Protected spyMission = (Protected)db.getProtectedTable().newPersistent();
49 spyMission.setCanRead(moneyPenny);
50 spyMission.setCanSelect(moneyPenny);
51 spyMission.setCanWrite(moneyPenny);
52 spyMission.setCanDelete(spyMaster);
53 spyMission.setSpy(spy);
54 spyMission.setMission("impossible");
55 spyMission.setDeleted(false);
56 spyMission.makePersistent();
57
58 Protected nullCanSelectMission = (Protected)db.getProtectedTable().newPersistent();
59 nullCanSelectMission.setCanRead(null);
60 nullCanSelectMission.setCanSelect(null);
61 nullCanSelectMission.setCanWrite(moneyPenny);
62 nullCanSelectMission.setCanDelete(spyMaster);
63 nullCanSelectMission.setSpy(spy);
64 nullCanSelectMission.setMission("impossible");
65 nullCanSelectMission.setDeleted(false);
66 nullCanSelectMission.makePersistent();
67
68 final Column<?> canReadColumn = db.getProtectedTable().getCanReadColumn();
69 final PreparedTailoredQuery ptq = new PreparedTailoredQuery(
70 new Column[] { canReadColumn }, new Table[0], canReadColumn
71 .fullQuotedName()
72 + "=" + moneyPenny.getTroid(), null);
73 assertEquals(new Integer(1), new Integer(EnumUtils
74 .vectorOf(ptq.selection()).size()));
75 Enumeration<FieldSet> en = ptq.selection();
76 while (en.hasMoreElements()) {
77 Object ne = en.nextElement();
78 System.err.println("FieldSet:" + ne);
79 }
80
81 PoemTask readAsGuest = new PoemTask() {
82 public void run() {
83 try {
84 Enumeration<FieldSet> en2 = ptq.selection();
85 assertEquals(new Integer(1), new Integer(EnumUtils.vectorOf(en2)
86 .size()));
87 en2 = ptq.selection();
88 while (en2.hasMoreElements()) {
89 System.err.println(en2.nextElement());
90 }
91 fail("Should have blown up");
92 } catch (AccessPoemException e) {
93 e = null;
94 }
95
96 }
97 };
98
99 PoemThread.withAccessToken(db.guestAccessToken(), readAsGuest);
100
101 final Column<?> missionColumn = db.getProtectedTable().getMissionColumn();
102 assertEquals("moneyPenny", spyMission.getCanRead().getName());
103 final PreparedTailoredQuery ptq2 = new PreparedTailoredQuery(new Column[] {
104 missionColumn, db.getUserTable().getPasswordColumn() },
105 new Table[] { db.getUserTable() }, missionColumn.fullQuotedName()
106 + " = 'impossible' AND "
107 + db.getProtectedTable().getSpyColumn().fullQuotedName()
108 + " = " + db.getUserTable().troidColumn().fullQuotedName(),
109 null);
110 PoemTask readAsGuest2 = new PoemTask() {
111 public void run() {
112 Enumeration<FieldSet> en2 = ptq2.selection();
113 try {
114 assertEquals(2, EnumUtils.vectorOf(en2).size());
115 en2 = ptq2.selection();
116 while (en2.hasMoreElements()) {
117 FieldSet tuple = (FieldSet)en2.nextElement();
118 System.err.println(tuple);
119 }
120 fail("Should have blown up");
121 } catch (AccessPoemException e) {
122 e = null;
123 }
124
125 }
126 };
127
128 PoemThread.withAccessToken(db.guestAccessToken(), readAsGuest2);
129
130
131
132
133 spyMission.setCanRead(null);
134 db.getUserTable().getTableInfo().setDefaultcanread(moneyPenny);
135
136 try {
137 PoemThread.withAccessToken(db.guestAccessToken(), readAsGuest2);
138 } catch (AccessPoemException e) {
139 e = null;
140 }
141
142
143 db.getProtectedTable().getTableInfo().setDefaultcanread(moneyPenny);
144 try {
145 PoemThread.withAccessToken(db.guestAccessToken(), readAsGuest2);
146 } catch (AccessPoemException e) {
147 e = null;
148 }
149
150
151 db.getProtectedTable().getTableInfo().setDefaultcanread(null);
152 db.getUserTable().getTableInfo().setDefaultcanread(null);
153 spyMission.delete();
154 nullCanSelectMission.delete();
155 spy.delete();
156 spyMaster.delete();
157 moneyPenny.delete();
158
159 }
160
161
162
163
164
165 public void testSelection_firstRaw() {
166
167 }
168
169
170
171
172
173
174
175 public void testPreparedTailoredQueryStringColumnArrayTableArrayStringString() {
176
177 }
178
179
180
181
182
183 public void testPreparedTailoredQueryColumnArrayTableArrayStringString() {
184
185 }
186
187
188
189
190
191 public void testTailoredQueryColumnArrayTableArrayStringString() {
192
193 }
194
195
196
197
198
199 public void testTailoredQueryStringColumnArrayTableArrayStringString() {
200
201 }
202
203
204
205
206 public void testToString() {
207
208 }
209
210 }