def test_chemical_should_return_chemical_for_format_name(self, mock_search):
        mock_chebi = MockQuery((self.chebi.chebi_id, self.chebi.display_name, self.chebi.chebiid, self.chebi.format_name))
        mock_chebi_url = MockQuery((self.chebi_url.obj_url,))
        
        def side_effect(*args, **kwargs):
            if args[0] == ChebiUrl.obj_url:
                return mock_chebi_url
            else:
                return mock_chebi

        mock_search.side_effect = side_effect

        request = testing.DummyRequest()
        request.context = testing.DummyResource()
        request.matchdict['id'] = self.chebi.format_name
        response = chemical(request)

        self.assertEqual(response, {
            'display_name': self.chebi.display_name,
            'chebi_id': self.chebi.chebiid,
            'id': self.chebi.chebi_id,
            'link': '/chemical/' + self.chebi.format_name + '/overview/',
            'urls': [{'link': self.chebi_url.obj_url}]
        })
        self.assertTrue(mock_chebi._query_filter._params.compare(Chebi.format_name == self.chebi.format_name))
        self.assertTrue(mock_chebi_url._query_filter._params.compare(ChebiUrl.chebi_id == self.chebi.chebi_id))
    def test_chemical_should_404_nonexistent_identifier(self, mock_search):
        mock_search.return_value = MockQuery(None)

        request = testing.DummyRequest()
        request.context = testing.DummyResource()
        request.matchdict['id'] = 'nonexistent_id'
        response = chemical(request)

        self.assertEqual(response.status_code, 404)
        self.assertEqual(json.loads(response.body), {'error': "Chemical not found"})
    def test_should_return_non_existent_chemical(self, mock_search,
                                                 mock_redis):
        mock_search.return_value = MockQuery(None)

        request = testing.DummyRequest()
        request.context = testing.DummyResource()
        #request.matchdict['format_name'] = 'nonexistent_id'
        id = mock_redis.extract_id_request(request,
                                           'chemical',
                                           param_name='format_name')
        response = chemical(request)
        self.assertEqual(response.status_code, 404)
    def test_should_return_valid_chemical(self, mock_search, mock_redis):
        mock_search.side_effect = chemical_side_effect

        chem = factory.ChebiFactory()
        request = testing.DummyRequest()
        request.context = testing.DummyResource()
        #request.matchdict['format_name'] = "CHEBI:16240"
        format_name = mock_redis.extract_id_request(request,
                                                    'chemical',
                                                    param_name='format_name')

        response = chemical(request)
        self.assertEqual(response, chem.to_dict())