예제 #1
0
    async def test_site_root_remove_domain_root(
        self,
        client: AsyncClient,
        global_root_user: models.User,
        global_domain_root_user: models.User,
        global_domain_0: models.Domain,
    ) -> None:
        url = app.url_path_for(
            self.url_base,
            domain=global_domain_0.url,
            user=global_domain_root_user.id,
        )
        response = await do_api_request(client, "DELETE", url,
                                        global_root_user)
        assert response.status_code == 200
        res = response.json()
        assert res["errorCode"] == ErrorCode.Success

        url = app.url_path_for(
            TestDomainUserGet.url_base,
            domain=global_domain_0.url,
            user=global_domain_root_user.id,
        )
        response = await do_api_request(client, "GET", url, global_root_user)
        assert response.status_code == 200
        res = response.json()
        assert res["errorCode"] == ErrorCode.DomainUserNotFoundError
예제 #2
0
 async def test_list_records_no_filter(
     self,
     client: AsyncClient,
     user: models.User,
     global_domain_0: models.Domain,
     record_0: models.Record,
     record_1: models.Record,
     record_2: models.Record,
 ) -> None:
     url = app.url_path_for(self.url_base, domain=global_domain_0.url)
     response = await do_api_request(client, "GET", url, user)
     assert response.status_code == 200
     res = response.json()
     res = res["data"]
     assert res["count"] == 3
     assert len(res["results"]) == 3
     assert (len(
         list(filter(lambda x: x["id"] == str(record_0.id),
                     res["results"]))) == 1)
     assert (len(
         list(filter(lambda x: x["id"] == str(record_1.id),
                     res["results"]))) == 1)
     assert (len(
         list(filter(lambda x: x["id"] == str(record_2.id),
                     res["results"]))) == 1)
예제 #3
0
 async def test_jwt(self, client: AsyncClient, user: models.User) -> None:
     url = app.url_path_for("jwt_decoded")
     response = await do_api_request(client, "GET", url, user)
     assert response.status_code == 200
     res = response.json()
     assert "data" in res
     res_jwt_dict = res["data"]
     access_token = user_access_tokens[user.id]
     header_jwt_dict = jwt.decode(
         access_token,
         key=settings.jwt_secret,
         verify=False,
         algorithms=[settings.jwt_algorithm],
     )
     for key in [
             "sub",
             "iat",
             "nbf",
             "exp",
             "type",
             "fresh",
             "csrf",
             "category",
             "username",
             "email",
             "studentId",
             "realName",
             "role",
             "oauthName",
             "isActive",
     ]:
         assert res_jwt_dict.get(key) == header_jwt_dict.get(key)
예제 #4
0
class TestDomainList:
    url = app.url_path_for("list_domains")

    async def list_domain_helper(self, client: AsyncClient, user: models.User,
                                 ordering: str) -> Any:
        response = await do_api_request(client, "GET", self.url, user,
                                        {"ordering": ordering})
        assert response.status_code == 200
        res = response.json()
        res = res["data"]
        assert res["count"] == GLOBAL_DOMAIN_COUNT + 2
        assert len(res["results"]) == GLOBAL_DOMAIN_COUNT + 2
        return res

    @pytest.mark.parametrize("user", [lazy_fixture("global_root_user")])
    async def test_list_domain_asc(self, client: AsyncClient,
                                   user: models.User) -> None:
        await self.list_domain_helper(client, user, "updated_at")

    @pytest.mark.parametrize("user", [lazy_fixture("global_root_user")])
    async def test_list_domain_desc(self, client: AsyncClient,
                                    user: models.User) -> None:
        await self.list_domain_helper(client, user, "-updated_at")

    @pytest.mark.parametrize("user", [lazy_fixture("global_root_user")])
    async def test_list_domain_illegal_field(self, client: AsyncClient,
                                             user: models.User) -> None:
        response = await do_api_request(client, "GET", self.url, user,
                                        {"ordering": "error_field"})
        assert response.status_code == 200
        res = response.json()
        assert res["errorCode"] == ErrorCode.IllegalFieldError
예제 #5
0
 async def test_version(self, client: AsyncClient,
                        user: models.User) -> None:
     url = app.url_path_for("version")
     response = await do_api_request(client, "GET", url, user)
     assert response.status_code == 200
     res = response.json()
     assert res["version"] == get_version()
     assert res["git"] == get_git_version()
예제 #6
0
 async def test_delete(
     self,
     client: AsyncClient,
     user: models.User,
     domain: models.Domain,
 ) -> None:
     url = app.url_path_for("delete_domain", domain=domain.url)
     response = await do_api_request(client, "DELETE", url, user)
     assert response.status_code == 200
     res = response.json()
     assert res["errorCode"] == ErrorCode.APINotImplementedError
예제 #7
0
 async def validate_update(
     self,
     client: AsyncClient,
     user: models.User,
     domain: models.Domain,
     data: Dict[str, str],
 ) -> None:
     url = app.url_path_for(self.url_base, domain=domain.url)
     response = await do_api_request(client, "PATCH", url, user, data=data)
     domain.update_from_dict(data)
     await validate_test_domain(response, user, domain)
예제 #8
0
 async def test_domain_not_exist(
     self,
     client: AsyncClient,
     user: models.User,
     domain: models.Domain,
 ) -> None:
     url = app.url_path_for(self.url_base, domain=domain.url + "_not_exist")
     response = await do_api_request(client, "GET", url, user)
     assert response.status_code == 200
     res = response.json()
     assert res["errorCode"] == ErrorCode.DomainNotFoundError
예제 #9
0
 async def test_global_domains(
     self,
     client: AsyncClient,
     user: models.User,
     domain: models.Domain,
     url_type: str,
 ) -> None:
     domain_path = get_path_by_url_type(domain, url_type)
     url = app.url_path_for(self.url_base, domain=domain_path)
     response = await do_api_request(client, "GET", url, user)
     await validate_test_domain(response, user, domain)
예제 #10
0
 async def validate_update(self, client: AsyncClient, user: User,
                           data: Dict[str, str]) -> None:
     url = app.url_path_for(self.url_base)
     response = await do_api_request(
         client,
         "PATCH",
         url,
         user,
         data=data,
     )
     user.update_from_dict(data)
     validate_user_profile(response, user)
예제 #11
0
 async def api_test_helper(
     self,
     client: AsyncClient,
     user: models.User,
     added_user: models.User,
     domain: models.Domain,
     role: str = "",
 ) -> Response:
     data = {"user": str(added_user.id)}
     if role:
         data["role"] = role
     url = app.url_path_for(self.url_base, domain=domain.url)
     response = await do_api_request(client, "POST", url, user, data=data)
     return response
예제 #12
0
 async def test_url_duplicate(
     self,
     client: AsyncClient,
     global_root_user: models.User,
     global_domain_0: models.Domain,
     global_domain_1: models.Domain,
 ) -> None:
     data = {"url": global_domain_1.url}
     url = app.url_path_for(self.url_base, domain=global_domain_0.url)
     response = await do_api_request(client,
                                     "PATCH",
                                     url,
                                     global_root_user,
                                     data=data)
     assert response.status_code == 200
     res = response.json()
     assert res["errorCode"] == ErrorCode.IntegrityError
예제 #13
0
 async def api_test_helper(self, request: Any, client: AsyncClient,
                           domain: models.Domain, name: str) -> None:
     task = self.tasks.get(name)
     assert task
     user, target_user, error_code = task
     user_model: models.User = request.getfixturevalue(user)
     target_user_model: models.User = request.getfixturevalue(target_user)
     url = app.url_path_for(self.url_base, domain=domain.url)
     data = {"target_user": str(target_user_model.id)}
     response = await do_api_request(client,
                                     "POST",
                                     url,
                                     user_model,
                                     data=data)
     if error_code == ErrorCode.Success:
         domain.owner_id = target_user_model.id
         await validate_test_domain(response, target_user_model, domain)
     else:
         assert response.status_code == 200
         res = response.json()
         assert res["errorCode"] == error_code
예제 #14
0
 async def test_jwt_decoded_unauthorized(self, client: AsyncClient) -> None:
     url = app.url_path_for("jwt_decoded")
     response = await client.request(method="GET", url=url)
     assert response.status_code == 401
     res = response.json()
     assert res["detail"] == "Unauthorized"