def test_invalidate_state(self): request = generate_request() columns = generate_columns() resource = StatefulResource() post = {} form = YaatValidatorForm(post, request=request, columns=columns, resource=resource) self.assertTrue(form.is_valid()) self.assertIn(form.session_key(resource), request.session) form.invalidate_state() self.assertNotIn(form.session_key(resource), request.session)
def test_stateful_init(self): request = generate_request() columns = generate_columns() resource = StatefulResource() post = {} form = YaatValidatorForm(post, request=request, columns=columns, resource=resource) self.assertTrue(form.is_valid()) self.assertEqual( request.session[form.session_key(resource)], {'limit': form.fields['limit'].initial, 'offset': form.fields['offset'].initial} ) post = {'limit': form.fields['limit'].initial, 'offset': form.fields['offset'].initial + 1, 'headers': []} # Without "headers" the state resets itself form = YaatValidatorForm(post, request=request, columns=columns, resource=resource) self.assertTrue(form.is_valid()) self.assertEqual( request.session[form.session_key(resource)], {'limit': form.fields['limit'].initial, 'offset': form.fields['offset'].initial + 1} )
def test_reset_offset_empty_page(self): request, first_page = self.post({}) limit = len(first_page['rows']) item_count = Item.objects.count() self.assertGreater(limit, 0) pages = math.ceil(item_count / limit) for offset in range(pages+10): # Over-iterate pages request, data = self.post({'offset': offset+1}) # Page index is not zero-based if offset >= 2: # 3rd page does not exists. Resource must always return with the 1st page self.assertEqual(data, first_page) self.assertEqual( request.session[YaatValidatorForm.session_key(self.RESOURCE)]['offset'], YaatValidatorForm.base_fields['offset'].initial )
def test_session_key(self): resource = StatefulResource() self.assertEqual(YaatValidatorForm.session_key(resource), 'yaat_init_state_' + StatefulResource.Meta.resource_name)