Internally, Google OAuth handles authentication and an database entry is created for the user details.
The user is now logged in.
Use Case 2 (Signing In)
User opens site and already has an account.
User selects "Log in with Google."
Internally, Google OAuth handles authentication.
A database entry is checked for existence containing user details.
The user is now logged in.
Use Case 3 (Default Matchmaking)
User is logged in.
User would like to start a game.
They would like to be paired with anyone available.
They press the matchmaking button and matchmaking begins.
Use Case 3 (Party Matchmaking)
User is logged in and would like to be teamed up with a friend.
They party with the friend and start matchmaing, which will team them up and place them against another team.
Use Case 4 (Full Game Flow)
Matchmaking completes, user is assigned initial role of code writer.
User sees problem and begins to write code. Function names and associated (potentially partially autogenerated) JavaDocs are sent to the tester's machine.
Tester writes and runs unit tests for functions exposed. Unit test results are sent back to coder's machine.
Halfway through match, user roles switch.
When all tests are passing, code is submitted for scoring.
Code is graded based on correctness, efficiency (runtime), validity of unit tests, and overall time taken to finish prompt.
Player rankings updated based on score.
Use Case 5 (Perfect Game Flow)
Matchmaking completes, user is assigned initial role of code writer.
User sees problem and begins to write code. Function names and associated (potentially partially autogenerated) JavaDocs are sent to the tester's machine.
Tester writes and runs unit tests for functions exposed. Unit test results are sent back to coder's machine.
All tests are passing, code is submitted for scoring.
Code is graded based on correctness, efficiency (runtime), validity of unit tests, and overall time taken to finish prompt.
Player rankings updated based on score.
Use Case 6 (Worst-Case Game Flow)
Matchmaking completes, user is assigned initial role of code writer.
User sees problem and begins to write code. Function names and associated (potentially partially autogenerated) JavaDocs are sent to the tester's machine.
Tester writes and runs unit tests for functions exposed. Unit test results are sent back to coder's machine.
Halfway through match, user roles switch.
All tests still not passing.
Timer runs out.
Code is auto-submitted for grading, with penalties applied for incorrectness and running out of time.