def test_exibicao_de_lista_de_itens_quando_houverem_mais_de_um_item(self): """ Dado: um sistema de recomendação com 6 usuários E cada usuário com 6 itens Quando: eu pegar a informação do item 6 Então: deve haver 6 reviews para este item """ rs = RecommenderSystemBuilder() \ .aRecommenderSystem() \ .withUsers(6) \ .withItems(6) \ .build() item6Users = rs.getItem(6).getReviewsLength() self.assertEqual(6, item6Users)
def test_exibicao_de_lista_de_itens(self): """ Dado: um sistema de recomendação com 3 usuários E cada usuário com 1 item Quando: eu pegar a informação do item Então: deve haver 3 reviews para este item """ rs = RecommenderSystemBuilder() \ .aRecommenderSystem() \ .with3Users() \ .with1ItemEach() \ .build() item1users = rs.getItem(1).getReviewsLength() self.assertEqual(3, item1users)
def test_exibicao_de_lista_de_usuario_com_mais_de_um_item(self): """ Dado: um sistema de recomendação com 5 usuários E cada usuário com 3 item Quando: eu pegar a informação dos usuários Então: deve haver um usuário 5 com 3 itens """ rs = RecommenderSystemBuilder() \ .aRecommenderSystem() \ .with5Users() \ .with3ItemsEach() \ .build() user5Items = rs.getUser(5).getReviewsLength() self.assertEqual(3, user5Items)
def test_pega_o_resultado_de_uma_analise(self): """ Dado: um sistema de recomendação com 1 usuário E este usuário com avaliação 10 para um item Quando: eu pedir a avaliação deste item Então: deve me retornar 10 como avaliação """ rs = RecommenderSystemBuilder() \ .aRecommenderSystem() \ .with1User() \ .with1Item(rating=10) \ .build() ratingUser1Item1 = rs.getRating(1, 1) self.assertEqual(10, ratingUser1Item1)
def test_verifica_se_ha_analises_quando_nao_houver(self): """ Dado: um sistema de recomendações com 1 usuário E este usuário com recomendações apenas para os items 1 e 3 Quando: eu verificar se existe recomendação para o item 2 Então: não deve haver recomendação para este item """ rs = RecommenderSystemBuilder() \ .aRecommenderSystem() \ .with1User() \ .withOnlyItem1And3() \ .build() hasRatingItem2 = rs.hasRating(1, 2) self.assertFalse(hasRatingItem2)
def test_verifica_se_ha_analises_quando_estiver_fora_da_colecao(self): """ Dado: um sistema de recomendações com 1 usuário E este usuário possuir apenas 1 recomendação Quando: eu verificar se existe recomendação para um usuário que não exista Ou eu verificar se existe recomendação para um item que não exista Então: não deve haver recomendação para estes casos """ rs = RecommenderSystemBuilder() \ .aRecommenderSystem() \ .with1User() \ .with1ItemEach() \ .build() hasRatingUsuario2 = rs.hasRating(2, 1) hasRatingItem2 = rs.hasRating(1, 2) self.assertFalse(hasRatingUsuario2) self.assertFalse(hasRatingItem2)
def test_verifica_se_ha_analises(self): """ Dado: um sistema de recomendações com 3 usuários E cada usuário com 3 itens Quando: eu verificar se existe análise Então: deve haver correlação para todos usuários e itens """ rs = RecommenderSystemBuilder() \ .aRecommenderSystem() \ .with3Users() \ .with3ItemsEach() \ .build() hasRatings = [] for user in range(0, 3): for item in range(0, 3): hasRatings.append(rs.hasRating(user, item)) for hasRating in hasRatings: self.assertTrue(hasRating)
def test_exibicao_de_lista_de_usuario(self): """ Dado: um sistema de recomendação com 3 usuários E cada usuário com 1 item Quando: eu pegar a informação dos 3 usuários Então: cada usuário deverá ter apenas 1 review """ rs = RecommenderSystemBuilder() \ .aRecommenderSystem() \ .with3Users() \ .with1ItemEach() \ .build() user1Items = rs.getUser(1).getReviewsLength() user2Items = rs.getUser(2).getReviewsLength() user3Items = rs.getUser(3).getReviewsLength() self.assertEqual(1, user1Items) self.assertEqual(1, user2Items) self.assertEqual(1, user3Items)
def test_pega_o_resultado_de_uma_analise_com_varios_usuarios_e_itens(self): """ Dado: um sistema de recomendação com n=5 usuário E estes usuários cada qual com m=5 avaliações de itens Quando: eu pedir a avaliação de um item Então: deve me retornar n*m como avaliação """ rs = RecommenderSystemBuilder() \ .aRecommenderSystem() \ .with5Users() \ .with5ItemsNM() \ .build() ratingUser2Item1 = rs.getRating(2, 1) ratingUser3Item4 = rs.getRating(3, 4) ratingUser5Item5 = rs.getRating(5, 5) self.assertEqual(2 * 1, ratingUser2Item1) self.assertEqual(3 * 4, ratingUser3Item4) self.assertEqual(5 * 5, ratingUser5Item5)
def test_retorna_uma_predicao_baseada_no_item(self): """ Dado: uma sistema de recomendações com 5 usuários Sendo o primeiro deles com avaliação para os itens 1..4 = 3 E os demais usuários com avaliações para os itens 1..5 = 3 Quando: eu pedir a predição da avaliação do item 5 para o usuário 1 Então: o sistema deve me retornar a predição baseada no item = 3 """ rs = RecommenderSystemBuilder() \ .aRecommenderSystem() \ .withRatings([ [3, 3, 3, 3, '?'], [3, 3, 3, 3, 3], [3, 3, 3, 3, 3], [3, 3, 3, 3, 3], [3, 3, 3, 3, 3] ]) \ .build() predictionUser1Item1 = rs.getItemBasedPrediction(1, 5) self.assertEqual(3, predictionUser1Item1)