@@ -18,7 +18,10 @@ defmodule CodebattleWeb.Api.V1.GroupTaskSolutionControllerTest do
1818 response =
1919 conn
2020 |> put_req_header ( "authorization" , "Bearer some-token" )
21- |> post ( "/api/v1/group_task_solutions" , % { "solution" => "print(1)" , "lang" => "python" } )
21+ |> post ( "/api/v1/group_task_solutions" , % {
22+ "solution" => Base . encode64 ( "print(1)" ) ,
23+ "lang" => "python"
24+ } )
2225 |> json_response ( 403 )
2326
2427 assert response [ "error" ] == "group_tasks_api_disabled"
@@ -30,7 +33,10 @@ defmodule CodebattleWeb.Api.V1.GroupTaskSolutionControllerTest do
3033 response =
3134 conn
3235 |> put_req_header ( "authorization" , "Bearer missing-token" )
33- |> post ( "/api/v1/group_task_solutions" , % { "solution" => "print(1)" , "lang" => "python" } )
36+ |> post ( "/api/v1/group_task_solutions" , % {
37+ "solution" => Base . encode64 ( "print(1)" ) ,
38+ "lang" => "python"
39+ } )
3440 |> json_response ( 401 )
3541
3642 assert response [ "error" ] == "unauthorized"
@@ -47,7 +53,7 @@ defmodule CodebattleWeb.Api.V1.GroupTaskSolutionControllerTest do
4753 conn
4854 |> put_req_header ( "authorization" , "Bearer #{ token . token } " )
4955 |> post ( "/api/v1/group_task_solutions" , % {
50- "solution" => "def solution():\n return 42\n " ,
56+ "solution" => Base . encode64 ( "def solution():\n return 42\n " ) ,
5157 "lang" => "Python"
5258 } )
5359 |> json_response ( 201 )
@@ -71,11 +77,34 @@ defmodule CodebattleWeb.Api.V1.GroupTaskSolutionControllerTest do
7177 response =
7278 conn
7379 |> put_req_header ( "authorization" , "Bearer #{ token . token } " )
74- |> post ( "/api/v1/group_task_solutions" , % { "solution" => " " , "lang" => "" } )
80+ |> post ( "/api/v1/group_task_solutions" , % {
81+ "solution" => Base . encode64 ( " " ) ,
82+ "lang" => ""
83+ } )
7584 |> json_response ( 422 )
7685
7786 assert response [ "errors" ] [ "solution" ] == [ "can't be blank" ]
7887 assert response [ "errors" ] [ "lang" ] == [ "can't be blank" ]
7988 assert Repo . aggregate ( Codebattle.GroupTaskSolution , :count , :id ) == 0
8089 end
90+
91+ test "returns validation error for malformed solution base64" , % { conn: conn } do
92+ FunWithFlags . enable ( :group_tasks_api )
93+
94+ user = insert ( :user )
95+ group_task = insert ( :group_task )
96+ { :ok , token } = Context . create_or_rotate_token ( group_task , user . id )
97+
98+ response =
99+ conn
100+ |> put_req_header ( "authorization" , "Bearer #{ token . token } " )
101+ |> post ( "/api/v1/group_task_solutions" , % {
102+ "solution" => "***not-base64***" ,
103+ "lang" => "python"
104+ } )
105+ |> json_response ( 422 )
106+
107+ assert response [ "errors" ] [ "solution" ] == [ "is invalid base64" ]
108+ assert Repo . aggregate ( Codebattle.GroupTaskSolution , :count , :id ) == 0
109+ end
81110end
0 commit comments