Mercurial > p > roundup > code
comparison test/test_templating.py @ 6404:e29d5f4e0af4
issue2551132 - Setting form value in query string --- issues
Code now uses value in query string even if there is a default_value
set. Also handle the exception caused by an invalid value specified
in the query string.
| author | John Rouillard <rouilj@ieee.org> |
|---|---|
| date | Mon, 10 May 2021 16:47:51 -0400 |
| parents | a7e7314fb7d9 |
| children | f1f8d75edd97 |
comparison
equal
deleted
inserted
replaced
| 6403:9957d8d10783 | 6404:e29d5f4e0af4 |
|---|---|
| 43 from roundup.anypy.strings import u2s, s2u | 43 from roundup.anypy.strings import u2s, s2u |
| 44 | 44 |
| 45 class MockDatabase(MockNull): | 45 class MockDatabase(MockNull): |
| 46 def getclass(self, name): | 46 def getclass(self, name): |
| 47 # limit class names | 47 # limit class names |
| 48 if name not in [ 'issue', 'user' ]: | 48 if name not in [ 'issue', 'user', 'status' ]: |
| 49 raise KeyError('There is no class called "%s"' % name) | 49 raise KeyError('There is no class called "%s"' % name) |
| 50 # Class returned must have hasnode(id) method that returns true | 50 # Class returned must have hasnode(id) method that returns true |
| 51 # otherwise designators like 'issue1' can't be hyperlinked. | 51 # otherwise designators like 'issue1' can't be hyperlinked. |
| 52 self.classes[name].hasnode = lambda id: True if int(id) < 10 else False | 52 self.classes[name].hasnode = lambda id: True if int(id) < 10 else False |
| 53 return self.classes[name] | 53 return self.classes[name] |
| 142 """Make sure lookup of a Link property works even in the | 142 """Make sure lookup of a Link property works even in the |
| 143 presence of multiple values in the form.""" | 143 presence of multiple values in the form.""" |
| 144 def lookup(key) : | 144 def lookup(key) : |
| 145 self.assertEqual(key, key.strip()) | 145 self.assertEqual(key, key.strip()) |
| 146 return "Status%s"%key | 146 return "Status%s"%key |
| 147 self.form.list.append(MiniFieldStorage("status", "1")) | 147 self.form.list.append(MiniFieldStorage("issue@status", "1")) |
| 148 self.form.list.append(MiniFieldStorage("status", "2")) | 148 self.form.list.append(MiniFieldStorage("issue@status", "2")) |
| 149 status = hyperdb.Link("status") | 149 status = hyperdb.Link("status") |
| 150 self.client.db.classes = dict \ | 150 self.client.db.classes = dict \ |
| 151 ( issue = MockNull(getprops = lambda : dict(status = status)) | 151 ( issue = MockNull(getprops = lambda : dict(status = status)) |
| 152 , status = MockNull(get = lambda id, name : id, lookup = lookup) | 152 , status = MockNull(get = lambda id, name : id, lookup = lookup) |
| 153 ) | 153 ) |
| 154 self.client.form = self.form | |
| 154 cls = HTMLClass(self.client, "issue") | 155 cls = HTMLClass(self.client, "issue") |
| 155 cls["status"] | 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 | |
| 198 cls = HTMLClass(self.client, "issue") | |
| 199 s = cls["status"] | |
| 200 self.assertEqual(s._value, '2') | |
| 156 | 201 |
| 157 def test_multilink(self): | 202 def test_multilink(self): |
| 158 """`lookup` of an item will fail if leading or trailing whitespace | 203 """`lookup` of an item will fail if leading or trailing whitespace |
| 159 has not been stripped. | 204 has not been stripped. |
| 160 """ | 205 """ |
