def test_form_validity(self): """ Test that SearchForm is valid when we expect: if search is empty or has more than 2 characters. It should also be valid if search_in is empty, but not if it has a bad value. """ # These fixtures are a mini suite of tuples, in the form (valid, data dict) fixtures = ( (True, {}), (False, { 'search': 'ab' }), (True, { 'search': 'abc' }), (True, { 'search': 'abc', 'search_in': 'title' }), (True, { 'search': 'abc', 'search_in': 'contributor' }), (False, { 'search': 'abc', 'search_in': 'bad' }), ) for expected, form_data in fixtures: sf = SearchForm(form_data) self.assertEquals(sf.is_valid(), expected)
def search_product(request): form = SearchForm() result = {} # if request.method == 'POST': # Attempt to grab information from the raw form information. # Note that we make use of both UserForm and UserProfileForm. search_form = SearchForm(data=request.POST) # if search_form.is_valid(): query = request.GET['name'] print(query) try: result = Product.objects.filter(name__istartswith=query) print(query) print(result) return render(request, 'reviews/results.html', { 'form': form, 'result': result, 'query': query }) except: return HttpResponseRedirect('/reviews/') return render(request, 'reviews/results.html', {'form': form})
def test_book_search_title(self, mock_search_form_init, mock_render): """The book search view should render with title search results when searching and no search_in is provided.""" self.load_csv() mock_request = mock.MagicMock(name='request', spec=HttpRequest) mock_request.GET = {'search': 'keras'} # this makes it easier to use assert_calls_with since we know what the 'form' item is mock_search_form_init.return_value = SearchForm(mock_request.GET) resp = book_search(mock_request) self.assertEquals(resp, mock_render.return_value) mock_search_form_init.assert_called_with(mock_request.GET) self.assertEquals(mock_render.call_count, 1) self.assertEquals(mock_render.call_args[0][0], mock_request) self.assertEquals(mock_render.call_args[0][1], 'reviews/search-results.html') self.assertEquals(mock_render.call_args[0][2]['form'], mock_search_form_init.return_value) self.assertEquals(mock_render.call_args[0][2]['search_text'], 'keras') self.assertEquals(len(mock_render.call_args[0][2]['books']), 1) for book in mock_render.call_args[0][2]['books']: self.assertEquals(book.title, 'Advanced Deep Learning with Keras')
def test_book_search_contributor(self, mock_search_form_init, mock_render): """The book search view should render with contributor name search results when search_in is contributor.""" self.load_csv() mock_request = mock.MagicMock(name='request', spec=HttpRequest) mock_request.GET = {'search': 'king', 'search_in': 'contributor'} # this makes it easier to use assert_calls_with since we know what the 'form' item is mock_search_form_init.return_value = SearchForm(mock_request.GET) resp = book_search(mock_request) self.assertEquals(resp, mock_render.return_value) mock_search_form_init.assert_called_with(mock_request.GET) self.assertEquals(mock_render.call_count, 1) self.assertEquals(mock_render.call_args[0][0], mock_request) self.assertEquals(mock_render.call_args[0][1], 'reviews/search-results.html') self.assertEquals(mock_render.call_args[0][2]['form'], mock_search_form_init.return_value) self.assertEquals(mock_render.call_args[0][2]['search_text'], 'king') self.assertEquals(len(mock_render.call_args[0][2]['books']), 1) for book in mock_render.call_args[0][2]['books']: self.assertEquals(book.title, 'The Talisman')
def test_search_form_fields(self): """Test that the SearchForm is defined with the correct fields.""" sf = SearchForm() self.assertEquals(len(sf.fields), 2) self.assertIsInstance(sf.fields['search'], forms.CharField) self.assertIsInstance(sf.fields['search_in'], forms.ChoiceField) self.assertEquals(sf.fields['search_in'].choices[0][0], 'title') self.assertEquals(sf.fields['search_in'].choices[0][1], 'Title') self.assertEquals(sf.fields['search_in'].choices[1][0], 'contributor') self.assertEquals(sf.fields['search_in'].choices[1][1], 'Contributor')