|
45 | 45 | class MockDatabase(MockNull): |
46 | 46 | def getclass(self, name): |
47 | 47 | # limit class names |
48 | | - if name not in [ 'issue', 'user' ]: |
| 48 | + if name not in [ 'issue', 'user', 'status' ]: |
49 | 49 | raise KeyError('There is no class called "%s"' % name) |
50 | 50 | # Class returned must have hasnode(id) method that returns true |
51 | 51 | # otherwise designators like 'issue1' can't be hyperlinked. |
@@ -144,15 +144,60 @@ def test_link(self): |
144 | 144 | def lookup(key) : |
145 | 145 | self.assertEqual(key, key.strip()) |
146 | 146 | return "Status%s"%key |
147 | | - self.form.list.append(MiniFieldStorage("status", "1")) |
148 | | - self.form.list.append(MiniFieldStorage("status", "2")) |
| 147 | + self.form.list.append(MiniFieldStorage("issue@status", "1")) |
| 148 | + self.form.list.append(MiniFieldStorage("issue@status", "2")) |
149 | 149 | status = hyperdb.Link("status") |
150 | 150 | self.client.db.classes = dict \ |
151 | 151 | ( issue = MockNull(getprops = lambda : dict(status = status)) |
152 | 152 | , status = MockNull(get = lambda id, name : id, lookup = lookup) |
153 | 153 | ) |
| 154 | + self.client.form = self.form |
| 155 | + cls = HTMLClass(self.client, "issue") |
| 156 | + |
| 157 | + s = cls["status"] |
| 158 | + self.assertEqual(s._value, '1') |
| 159 | + |
| 160 | + def test_link_default(self): |
| 161 | + """Make sure default value for link is returned |
| 162 | + if new item and no value in form.""" |
| 163 | + def lookup(key) : |
| 164 | + self.assertEqual(key, key.strip()) |
| 165 | + return "Status%s"%key |
| 166 | + status = hyperdb.Link("status") |
| 167 | + # set default_value |
| 168 | + status.__dict__['_Type__default_value'] = "4" |
| 169 | + |
| 170 | + self.client.db.classes = dict \ |
| 171 | + ( issue = MockNull(getprops = lambda : dict(status = status)) |
| 172 | + , status = MockNull(get = lambda id, name : id, lookup = lookup, get_default_value = lambda: 4) |
| 173 | + ) |
| 174 | + self.client.form = self.form |
| 175 | + |
| 176 | + cls = HTMLClass(self.client, "issue") |
| 177 | + s = cls["status"] |
| 178 | + self.assertEqual(s._value, '4') |
| 179 | + |
| 180 | + def test_link_with_value_and_default(self): |
| 181 | + """Make sure default value is not used if there |
| 182 | + is a value in the form.""" |
| 183 | + def lookup(key) : |
| 184 | + self.assertEqual(key, key.strip()) |
| 185 | + return "Status%s"%key |
| 186 | + self.form.list.append(MiniFieldStorage("issue@status", "2")) |
| 187 | + self.form.list.append(MiniFieldStorage("issue@status", "1")) |
| 188 | + status = hyperdb.Link("status") |
| 189 | + # set default_value |
| 190 | + status.__dict__['_Type__default_value'] = "4" |
| 191 | + |
| 192 | + self.client.db.classes = dict \ |
| 193 | + ( issue = MockNull(getprops = lambda : dict(status = status)) |
| 194 | + , status = MockNull(get = lambda id, name : id, lookup = lookup, get_default_value = lambda: 4) |
| 195 | + ) |
| 196 | + self.client.form = self.form |
| 197 | + |
154 | 198 | cls = HTMLClass(self.client, "issue") |
155 | | - cls["status"] |
| 199 | + s = cls["status"] |
| 200 | + self.assertEqual(s._value, '2') |
156 | 201 |
|
157 | 202 | def test_multilink(self): |
158 | 203 | """`lookup` of an item will fail if leading or trailing whitespace |
|
0 commit comments