testTranslate - silviaalejandra/todo-list-aws GitHub Wiki

Test de la función Translate

Test unitario

Se incluyeron las pruebas unitarias de la funcion Translate modificando el archivo /test/unit/TestToDo.py. El foco de pruebas fueron todas las porciones de código de soporte incluidas en el fichero todoList.py

Getters

def test_get_translate(self):
        print ('---------------------')
        print ('Start: test_get_translate')
        from src.todoList import get_translate

        os.environ['AWS_DEFAULT_REGION'] = 'us-east-1'
        result = get_translate(None)
        self.assertIsNotNone(result)
        print ('End: test_get_translate')


    def test_get_comprehend(self):
        print ('---------------------***---')
        print ('Start: test_get_comprehend')
        from src.todoList import get_comprehend

        os.environ['AWS_DEFAULT_REGION'] = 'us-east-1'
        result = get_comprehend(None)
        self.assertIsNotNone(result)
        print ('End: test_get comprehend')

Funciones

def test_get_languaje(self):
        print ('---------------------')
        print ('Start: test_get_languaje')
        from src.todoList import get_item_languaje
        
        # Testing file functions
        print ('Texto:' + self.text)
        responseLanguaje = get_item_languaje(
                self.text,
                self.comprehend)
        print ('Response Languaje:' + str(responseLanguaje))
        self.assertEqual(responseLanguaje, self.origin_lang)
        print ('End: test_get_languaje')


    def test_get_language_err(self):
        print ('---------------------')
        print ('Start: test_err_get_languaje---------------')
        from src.todoList import get_item_languaje

        self.assertRaises(
            Exception,
            get_item_languaje("*", self.comprehend))
        print ('End: test_err_get_languaje---------------')


    def test_translate_text_err(self):
        print ('---------------------')
        print ('Start: test_err_translate_text')
        from src.todoList import translate_text
        
        self.assertRaises(Exception,
            translate_text(self.text,
                None,
                "es",
                self.translate))
        self.assertRaises(TypeError,
            translate_text(self.text,
                "ii",
                "es",
                self.translate))
        self.assertRaises(Exception,
            translate_text(self.text,
                "ii",
                "es", 
                self.translate))
        print ('End: test_err_translate_text')


    def test_translate_text(self):
        print ('---------------------')
        print ('Start: test_translate_text')
        from src.todoList import translate_text
        
        # Testing file functions
        print ('Texto:' + self.text)
        response = translate_text(
                self.text,
                self.origin_lang,
                self.dest_lang,
                self.translate)
        print ('Response Translate:' + str(response))
        self.assertEqual(response, self.traduccion)
        print ('End: test_translate_text')


   # test por tranlate.py-------------------------
    # ---------------------------------------------
    def test_translate_item(self):
        print ('---------------------')
        print ('Start: test_translate_item')
        from src.todoList import get_item_languaje
        from src.todoList import translate_item
        from src.todoList import put_item

        responsePut = put_item(self.text, self.dynamodb)
        print ('Response PutItem' + str(responsePut))
        idItem = json.loads(responsePut['body'])['id']
        textoItem = json.loads(responsePut['body'])['text']
        print ('Id item:' + idItem)
        # Testing file functions
        # Table mock
        print ('Texto:' + textoItem)
        responseLanguaje = get_item_languaje(
                textoItem,
                self.comprehend)
        
        print ('Response Languaje:' + str(responseLanguaje))
        print ('lenguaje origen:' + self.origin_lang + 
                ' Lenguaje destino:'+self.dest_lang)
        self.assertEqual(responseLanguaje, self.origin_lang)
        
        responseTranslate = translate_item(
                textoItem,
                responseLanguaje,
                self.dest_lang,
                self.translate)
        print ('Response translate:' + str(responseTranslate))
        self.assertEqual(200, responseTranslate['statusCode'])
        print ('End: test_translate_item')


    def test_translate_item_err(self):
        print ('---------------------')
        print ('Start: test_translate_item_err')
        from src.todoList import translate_item
        from src.todoList import put_item

        responsePut = put_item(self.text, self.dynamodb)
        print ('Response PutItem' + str(responsePut))
        idItem = json.loads(responsePut['body'])['id']
        print ('Id item:' + idItem)
        
        self.assertRaises(Exception,
            translate_item(idItem,
                "ii", 
                self.translate,
                self.dynamodb))
                
        self.assertRaises(TypeError,
            translate_item(idItem,
                None, 
                self.translate,
                self.dynamodb))
                
        print ('End: test_err_translate')

Test integración

Se incluyó una prueba de traduccion dentro de los test integrales modificando el archivo /test/integration/todoApitest.py

#Test de Translate-----------------------------------------------
    #----------------------------------------------------------------
    def test_api_translatetodo(self):
        print('---------------------------------------')
        print('Starting - integration test Translate TODO')
        #Add TODO
        url = BASE_URL+"/todos"
        data = {
         "text": "Integration text example - TRADUCIR"
        }
        response = requests.post(url, data=json.dumps(data))
        json_response = response.json()
        print('Response Add Todo: '+ str(json_response))
        jsonbody= json.loads(json_response['body'])
        ID_TODO = jsonbody['id']
        print ('ID todo:'+ID_TODO)
        self.assertEqual(
            response.status_code, 200, "Error en la petición API a {url}"
        )
        self.assertEqual(
            jsonbody['text'], "Integration text example - TRADUCIR", "Error en la petición API a {url}"
        )
        #Test Translate TODO
        url = BASE_URL+"/todos/"+ID_TODO+"/it"
        response = requests.get(url)
        json_response = response.json()
        print('Response Translate Todo: '+ str(json_response))
        self.assertEqual(
            response.status_code, 200, "Error en la petición API a {url}"
        )
        self.assertEqual(
            json_response['text'], "Esempio di testo di integrazione - TRANSL", "Error en la petición API a {url}"
        )
        #Delete TODO to restore state
        url = BASE_URL+"/todos/"+ID_TODO
        response = requests.delete(url)
        self.assertEqual(
            response.status_code, 200, "Error en la petición API a {url}"
        )
        print('End - integration test Translate TODO')
    #----------------------------------------------------------------

La salida de las pruebas se encuentra en el fichero de ejecucion #69

logs/translateIntegrationTest.log

Y de ejecucion #104

logs/lastDeployStaging.log

Starting - integration test Translate TODO
Response Add Todo: {'statusCode': 200, 'body': '{"id": "c4c88a6a-7a65-11ec-8725-b22f520568f9", "text": "Integration text example - TRADUCIR", "checked": false, "createdAt": "1642733805.3403575", "updatedAt": "1642733805.3403575"}'}
ID todo:c4c88a6a-7a65-11ec-8725-b22f520568f9
Response Translate Todo: {'id': 'c4c88a6a-7a65-11ec-8725-b22f520568f9', 'text': 'Esempio di testo di integrazione - TRANSL', 'checked': False}
End - integration test Translate TODO

Cobertura de codigo lastDeploy 08


Nota

Al momento de la entrega no se ha podido superar el inconveniente de las pruebas unitarias que invocan las funciones Comprehend.detect_dominant_language y Translate.translate_text. No se han podido pasar de forma correcta los permisos del rol labRole para ejecutarlas. Sin embargo las pruebas integrales en el pipeline y las realizadas luego desde una consola indican que la funcion translate traduce sin problema alguno.