def setupDataRetrieve(exceptions={}, **returnValues):
    dataRetrieve = HarvesterDataRetrieve()
    mockHarvesterData = CallTrace('mockHarvesterData',
                                  returnValues=returnValues)
    mockHarvesterData.exceptions = exceptions
    dataRetrieve.addObserver(mockHarvesterData)
    return dataRetrieve, mockHarvesterData
 def testSomethingElseThanGetIsNotAllowed(self):
     dataRetrieve = HarvesterDataRetrieve()
     observer = CallTrace('observer')
     dataRetrieve.addObserver(observer)
     result = asString(dataRetrieve.handleRequest(arguments=dict(argument=['value'], verb=['AddObserver'])))
     header, body = result.split(CRLF*2,1)
     self.assertEqual(okJson, header+CRLF*2)
     self.assertEquals({'request': {'verb': 'AddObserver', 'argument': 'value'}, 'error': {'message': 'Value of the verb argument is not a legal verb, the verb argument is missing, or the verb argument is repeated.', 'code': 'badVerb'}}, JsonDict.loads(body))
     self.assertEquals([], observer.calledMethodNames())
 def testKnownCodeException(self):
     dataRetrieve = HarvesterDataRetrieve()
     observer = CallTrace('observer')
     observer.exceptions = dict(getError=Exception('idDoesNotExist'))
     dataRetrieve.addObserver(observer)
     result = asString(dataRetrieve.handleRequest(arguments=dict(verb=['GetError'])))
     header, body = result.split(CRLF*2,1)
     self.assertEqual(okJson, header+CRLF*2)
     self.assertEquals({'request': {'verb': 'GetError'}, 'error': {'message': 'The value of an argument (id or key) is unknown or illegal.', 'code': 'idDoesNotExist'}}, JsonDict.loads(body))
     self.assertEquals(['getError'], observer.calledMethodNames())
 def testErrorInCall(self):
     dataRetrieve = HarvesterDataRetrieve()
     observer = CallTrace('observer')
     observer.exceptions = dict(getError=Exception('Bad Bad Bad'))
     dataRetrieve.addObserver(observer)
     result = asString(dataRetrieve.handleRequest(arguments=dict(verb=['GetError'])))
     header, body = result.split(CRLF*2,1)
     self.assertEqual(okJson, header+CRLF*2)
     self.assertEquals({'request': {'verb': 'GetError'}, 'error': {'message': "Exception('Bad Bad Bad',)", 'code': 'unknown'}}, JsonDict.loads(body))
     self.assertEquals(['getError'], observer.calledMethodNames())
 def testGetUnexisting(self):
     dataRetrieve = HarvesterDataRetrieve()
     observer = CallTrace('observer')
     observer.exceptions=dict(getUnexisting=DeclineMessage())
     dataRetrieve.addObserver(observer)
     result = asString(dataRetrieve.handleRequest(arguments=dict(verb=['GetUnexisting'], argument=['value'])))
     header, body = result.split(CRLF*2,1)
     self.assertEqual(okJson, header+CRLF*2)
     self.assertEquals({'request': {'verb': 'GetUnexisting', 'argument': 'value'}, 'error': {'message': 'Value of the verb argument is not a legal verb, the verb argument is missing, or the verb argument is repeated.', 'code': 'badVerb'}}, JsonDict.loads(body))
     self.assertEquals(['getUnexisting'], observer.calledMethodNames())
     self.assertEquals({'argument': 'value'}, observer.calledMethods[0].kwargs)
    def testGetSomethingIsAllowed(self):
        dataRetrieve = HarvesterDataRetrieve()
        observer = CallTrace('observer', returnValues=dict(getSomething='get something result', listSomething=['a', 'b']))
        dataRetrieve.addObserver(observer)

        result = asString(dataRetrieve.handleRequest(arguments=dict(verb=['GetSomething'], argument=['value'])))
        header, body = result.split(CRLF*2,1)
        self.assertEqual(okJson, header+CRLF*2)
        self.assertEquals({'request': {
            'verb': 'GetSomething', 'argument': 'value',
            }, 'response': {'GetSomething': 'get something result'}}, JsonDict.loads(body))
        self.assertEquals(['getSomething'], observer.calledMethodNames())
        self.assertEquals({'argument': 'value'}, observer.calledMethods[0].kwargs)