def verify_auth_token(self, token): s = Serializer(os.environ.get('APP_SECRET_KEY')) try: data = s.loads(token) except (BadSignature, SignatureExpired): return None return User.objects(pk=data['id']).first()
def login(self, user_name, user_psw, remember_me): user_name = user_name.lower() user = User.objects(username=user_name).first() if user and pbkdf2_sha256.verify(user_psw, user.password): login_user(user, remember=remember_me) return True return False
def test_patch_dispositivos_sem_login(self): user = User.objects(username="******").first() actual = self.app.patch("/v1/usuarios/dispositivos/14", data=json.dumps({"active": False}), content_type='application/json') actual_data = json.loads(actual.data.decode("utf-8")) self.assertEqual(actual.status_code, 401) self.assertIn("message", actual_data)
def test_get_dispositivos_sucesso(self): login_header = login_api(self.app, "test", "123") user = User.objects(username="******").first() actual = self.app.get("/v1/usuarios/dispositivos", headers=login_header) actual_data = json.loads(actual.data.decode("utf-8")) self.assertEqual(actual.status_code, 200) self.assertIn("dispositivo", str(actual_data)) self.assertIn("---token---", str(actual_data))
def obter_minhas_inscricoes(self, email): user = User.objects(email=email) if not (user): raise UserDoesNotExist() inscricoes = user.first().inscricoes if inscricoes: return inscricoes.parlamentares, inscricoes.intervalo else: return [], 7
def test_delete_dispositivos_sucesso(self): login_header = login_api(self.app, "test", "123") user = User.objects(username="******").first() actual = self.app.delete("/v1/usuarios/dispositivos/14", headers=login_header) actual_data = json.loads(actual.data.decode("utf-8")) self.assertEqual(actual.status_code, 200) self.assertEqual("Apagado", actual_data["message"]) self.assertEqual(len(user.reload().devices), 0)
def test_patch_dispositivos_dispositivo_inexistente(self): login_header = login_api(self.app, "test", "123") user = User.objects(username="******").first() actual = self.app.patch("/v1/usuarios/dispositivos/124578", data=json.dumps({"active": False}), content_type='application/json', headers=login_header) actual_data = json.loads(actual.data.decode("utf-8")) self.assertEqual(actual.status_code, 400) self.assertEqual("Dispositivo não existe", actual_data["message"])
def test_patch_dispositivos_parametro_invalido(self): login_header = login_api(self.app, "test", "123") user = User.objects(username="******").first() actual = self.app.patch("/v1/usuarios/dispositivos/14", data=json.dumps({"active": "invalido"}), content_type='application/json', headers=login_header) actual_data = json.loads(actual.data.decode("utf-8")) self.assertEqual(actual.status_code, 400) self.assertIn("message", actual_data)
def test_alterar_configs_invalida(self): User(username='******', password='******', email='*****@*****.**', inscricoes=Inscricoes(intervalo=7, parlamentares=[])).save() Inscricao().alterar_configs(30, '*****@*****.**') self.assertEqual( User.objects(username='******').first().inscricoes.intervalo, 7)
def test_patch_dispositivos_parametro_inexistente(self): login_header = login_api(self.app, "test", "123") user = User.objects(username="******").first() actual = self.app.patch("/v1/usuarios/dispositivos/14", data=json.dumps({"naoexisto": True}), content_type='application/json', headers=login_header) actual_data = json.loads(actual.data.decode("utf-8")) self.assertEqual(actual.status_code, 200) self.assertIn("message", actual_data) self.assertNotIn("naoexisto", user.reload().devices[0].to_json())
def test_nova_inscricao_primeira_inscricao(self, mock_obter_parlamentar): warnings.simplefilter("ignore") mock_obter_parlamentar.return_value = self.parlamentar1 User(username='******', password='******', email='*****@*****.**').save() Inscricao().nova_inscricao(self.parlamentar1.cargo, self.parlamentar1.id, '*****@*****.**') self.assertEqual( User.objects(username='******').first().inscricoes, Inscricoes(intervalo=7, parlamentares=[self.parlamentar1]))
def test_patch_dispositivos_sucesso(self): login_header = login_api(self.app, "test", "123") user = User.objects(username="******").first() actual = self.app.patch("/v1/usuarios/dispositivos/14", data=json.dumps({"active": False}), content_type='application/json', headers=login_header) actual_data = json.loads(actual.data.decode("utf-8")) self.assertEqual(actual.status_code, 200) self.assertEqual("Ok", actual_data["message"]) self.assertFalse(user.reload().devices[0].active)
def test_post_dispositivos_sem_login(self): user_id = User.objects(username="******").first().pk actual = self.app.post("/v1/usuarios/dispositivos".format(user_id), data=json.dumps({ "uuid": "1414", "token": "---token2---", "name": "outro_dispositivo", "os": "iOS" }), content_type='application/json') actual_data = json.loads(actual.data.decode("utf-8")) self.assertEqual(actual.status_code, 401) self.assertIn("message", actual_data)
def test_post_dispositivos_faltando_parametros_obrigatorios(self): login_header = login_api(self.app, "test", "123") user_id = User.objects(username="******").first().pk actual = self.app.post("/v1/usuarios/dispositivos".format(user_id), data=json.dumps({ "uuid": "1414", "token": "---token2---", }), content_type='application/json', headers=login_header) actual_data = json.loads(actual.data.decode("utf-8")) self.assertEqual(actual.status_code, 400) self.assertIn("message", actual_data)
def obter_todas_inscricoes_para_processar(self, data_final=datetime.now()): inscricoes = [] numero_semana = int(data_final.strftime("%V")) for user in User.objects(): if user.inscricoes and user.inscricoes.parlamentares != []: inscricao = user.inscricoes if (numero_semana % (inscricao.intervalo / 7) != 0): logging.info( "Pulando {} (intervalo de inscricao: {})".format( user.username, inscricao.intervalo)) else: inscricoes.append(user) return inscricoes
def test_remover_inscricao(self): User(username='******', password='******', email='*****@*****.**', inscricoes=Inscricoes(intervalo=14, parlamentares=[self.parlamentar2])).save() Inscricao().remover_inscricao(self.parlamentar2.cargo, self.parlamentar2.id, '*****@*****.**') self.assertEqual( User.objects(username='******').first().inscricoes, Inscricoes(intervalo=14, parlamentares=[]))
def nova_inscricao(self, cargo, parlamentar_id, email): user = User.objects(email=email) if not (user): raise UserDoesNotExist() user = user.first() parlamentar = obter_parlamentar(cargo, parlamentar_id) inscricoes = user.inscricoes if inscricoes: user.inscricoes.parlamentares.append(parlamentar) user.save() else: inscricao = Inscricoes(parlamentares=[parlamentar], intervalo=7) user.inscricoes = inscricao user.save()
def test_post_dispositivos_dispositivo_com_mesmo_uuid_existente(self): login_header = login_api(self.app, "test", "123") user = User.objects(username="******").first() actual = self.app.post("/v1/usuarios/dispositivos", data=json.dumps({ "uuid": "14", "token": "---token2---", "name": "outro_dispositivo", "os": "iOS" }), content_type='application/json', headers=login_header) actual_data = json.loads(actual.data.decode("utf-8")) self.assertEqual(actual.status_code, 422) self.assertEqual("Dispositivo já existe", actual_data["message"]) self.assertEqual(len(user.reload().devices), 1)
def test_apagar_dispositivo(self): device1 = UserDevice(id="1", token="---token1---", active=False, name="Dispositivo1", os="Android 14") device2 = UserDevice(id="2", token="---token2---", name="Dispositivo2", os="Android 14") user = User(username="******", email="*****@*****.**", password="******", devices=[device1, device2]).save() Dispositivo().apagar_dispositivo(user.id, device1.id) self.assertEqual(User.objects(pk=user.id).first().devices, [device2])
def test_adicionar_dispositivo_sucesso(self): user = User(username="******", email="*****@*****.**", password="******").save() Dispositivo().adicionar_dispostivo(user_id=user.id, uuid="123", token="---token---", name="nome", os="os") self.assertEqual( User.objects(pk=user.id).first().devices, [ UserDevice(id="123", token="---token---", active=True, name="nome", os="os") ])
def test_atualizar_dispositivo_sucesso(self): device = UserDevice(id="14", token="---token---", name="Dispositivo", os="Android 14") user = User(username="******", email="*****@*****.**", password="******", devices=[device]).save() Dispositivo().atualizar_dispositivo(user.id, device.id, active=False) self.assertEqual( User.objects(pk=user.id).first().devices, [ UserDevice(id="14", token="---token---", active=False, name="Dispositivo", os="Android 14") ])
def test_atualizar_dispositivo_parametros_invalidos(self): device = UserDevice(id="14", token="---token---", name="Dispositivo", os="Android 14") user = User(username="******", email="*****@*****.**", password="******", devices=[device]).save() Dispositivo().atualizar_dispositivo(user.id, device.id, nao_existo=True) self.assertEqual( User.objects(pk=user.id).first().devices, [ UserDevice( id="14", token="---token---", name="Dispositivo", os="Android 14", ) ])
def test_get_dispositivos_sem_login(self): user_id = User.objects(username="******").first().pk actual = self.app.get("/v1/usuarios/dispositivos".format(user_id)) actual_data = json.loads(actual.data.decode("utf-8")) self.assertEqual(actual.status_code, 401) self.assertIn("message", actual_data)
def _obter_usuario(self, user_id): try: user = User.objects(pk=user_id).first() return user if user.pk else None except (ValidationError, AttributeError): raise UserDoesNotExist()
def remover_inscricao(self, cargo, parlamentar_id, email): User.objects(email=email).update_one(pull__inscricoes__parlamentares={ 'cargo': cargo, 'id': parlamentar_id })
def alterar_configs(self, periodo, email): if periodo in [7, 14, 21, 28]: User.objects(email=email).update_one( set__inscricoes__intervalo=periodo)
def test_registrar_sucesso(self): Usuario().registrar('user', '1234', '1234', '*****@*****.**') expected = User.objects(username='******').first() self.assertEqual(expected.email, '*****@*****.**')
def test_delete_dispositivos_sem_login(self): user = User.objects(username="******").first() actual = self.app.delete("/v1/usuarios/dispositivos/14") actual_data = json.loads(actual.data.decode("utf-8")) self.assertEqual(actual.status_code, 401) self.assertIn("message", actual_data)
def obter_por_id(self, id): return User.objects(pk=id).first()