Never finished my one sentence.

We were going to explore the pyramid.requests.Request, but we weren't sure 
how to implement this in our test.

On Tuesday, June 20, 2017 at 4:49:11 PM UTC-4, Mark Laskey wrote:
>
> Hello all!
>
> I started diving into pyramid_services at work last week and it seems like 
> a great tool to refactor view and test code into something that looks 
> cleaner.  We intend to use the service to separate live DB data from test 
> data by having our tests hit up against the testing service that would hold 
> mock data.  I've followed the documentation at 
> https://github.com/mmerickel/pyramid_services and the service works as 
> intended when it comes to the live DB data.  The issue lies within our test 
> code and the DummyRequest object.  
>
>     def __init__(self, context, request):
>         self.context = context
>         self.request = request
> >       self.data_svc = self.request.find_service(Data)
> E       AttributeError: 'DummyRequest' object has no attribute 
> 'find_service'
>
> Is there a way to give the DummyRequest object the find_service attribute 
> like we do with the BaseView(see below)?  We were going to explore the 
> pyramid.requests.Request 
>
> Mind you, I'm not 100% sure if this is the proper way to use 
> pyramid_services so please feel free to let me know if this is the correct 
> way or if there are any tweaks you would recommend.
>
>
>
> CODE:
>
> interfaces.py
>
> from zope.interface import Interface
>
> class Data(Interface):
>     def get_companies():
>         pass
>
> services.py (live DB data)
>
> class DBData(object):
>     def get_companies(self):
>         bpm_companies = 
> DBSession.query(BPMCompany).filter(BPMCompany.status == 1).all()
>
>         return bpm_companies
>
> services_test.py(test data)
>
> class MockData(object):
>     def get_companies(self):
>         bpm_companies = [{'company_name': 'ABC Corp'}, {'company_name': 
> 'DEF Corp'}, {'company_name': 'Z Corp'}]
>
>         return bpm_companies
>
> __init__.py
>
> ...
> config.include('pyramid_services')
> config.register_service(DBData(), Data)
> ...
>
> base.py(BaseView)
>
> class BaseView(object):
>     ...
>     def __init__(self, context, request):
>         self.context = context
>         self.request = request
>         self.data_svc = self.request.find_service(Data)
>     ...
>
> company.py(view)
>
> class CompanyView(BaseView):
>     @view_config(route_name='company', renderer='reporting/company.mako', 
> permission='admin')
>     def index(self):
>         request = self.request
>
>         bpm_companies = self.data_svc.get_companies()
>
>         return {'companies': bpm_companies}
>
> company_test.py
>
> from pyramid import testing
>
> import pytest
>
> from bpmreporting.views.company import CompanyView
>
> from bpmreporting.services.services_test import MockData
> from bpmreporting.services.interfaces import Data
>
> @pytest.fixture
> def config():
>     config = testing.setUp()
>     config.include('pyramid_mako')
>     config.include('pyramid_services')
>     config.register_service(MockData(), Data)
>     config.add_route('company', 'company')
>     yield config
>     testing.tearDown()
>
> @pytest.fixture
> def dummy_request():
>     return testing.DummyRequest()
>
> @pytest.fixture
> def dummy_context():
>     return testing.DummyResource()
>
> # Make sure index is returning the proper list of company names.  ie: The 
> MockData list of dictionaries.
> def test_company_index_view(config, dummy_request, dummy_context):
>     vw = CompanyView(dummy_context, dummy_request)
>     response = vw.index()
>     print(response)
>     # assert 'report_type_options' in response
>
>
>
>
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"pylons-discuss" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/pylons-discuss/af07bb51-4f68-483c-98b5-ff2f52327e4c%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to