Skip to content

Commit 30fffca

Browse files
committed
WIP: add user-set tests to mojolicious
WIP: add user-set tests to mojolicious routes WIP: add user-set tests to mojolicious routes WIP: updated user_sets tests to check for permissions FIX: update the way the set_version param is fetched to avoid error. WIP: new set_version mojolicious test. WIP: new set_version mojolicious test. WIP: deleting from db--update store tests WIP: cleanup the tests WIP: deleting from db--update store tests WIP: send message from mojolicious layer and more cleanup. FIX: update the pinia store tests. WIP: add user-set tests to mojolicious
1 parent 7e4e3f1 commit 30fffca

File tree

10 files changed

+495
-27
lines changed

10 files changed

+495
-27
lines changed

conf/permissions.dist.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,9 +100,10 @@ db_permissions:
100100
allowed_roles: ['course_admin', 'instructor']
101101
getUserSets:
102102
allowed_roles: ['course_admin', 'instructor']
103-
getUserSet:
104103
allow_self_access: true
104+
getUserSet:
105105
allowed_roles: ['course_admin', 'instructor']
106+
allow_self_access: true
106107
addUserSet:
107108
allowed_roles: ['course_admin', 'instructor']
108109
updateUserSet:

lib/DB/Schema/ResultSet/User.pm

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -323,9 +323,17 @@ An hashref of the user or merged user or a C<DBIx::Class::ResultSet>
323323
sub getCourseUser ($self, %args) {
324324
my $course_user;
325325

326-
if (defined($args{info}->{course_user_id})) {
326+
if (defined($args{info}{course_user_id})) {
327327
$course_user = $self->rs('CourseUser')
328328
->find({ course_user_id => $args{info}->{course_user_id} }, { prefetch => [qw/role/] });
329+
DB::Exception::UserNotInCourse->throw(
330+
message => "The user with id '$args{info}->{course_user_id}' is not enrolled in the course "
331+
. (
332+
$args{info}->{course_name}
333+
? " with name '$args{info}->{course_name}'"
334+
: " with course_id '$args{info}->{course_id}'."
335+
)
336+
) unless defined $course_user || $args{skip_throw};
329337
} else {
330338
my $course = $self->rs('Course')->getCourse(info => getCourseInfo($args{info}), as_result_set => 1);
331339
my $user = $self->getGlobalUser(info => getUserInfo($args{info}), as_result_set => 1);

lib/DB/Schema/ResultSet/UserSet.pm

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -374,10 +374,10 @@ sub updateUserSet ($self, %args) {
374374
my $user_set = $self->getUserSet(info => $args{info}, as_result_set => 1, skip_throw => 1);
375375

376376
DB::Exception::UserSetNotInCourse->throw(message => 'The user '
377-
. $args{info}{username}
377+
. ($args{info}{username} ? "with username '$args{info}{username}'" : "with user_id '$args{info}{user_id}'")
378378
. ' is not assigned to the set '
379-
. $args{info}{set_name}
380-
. ' with set version '
379+
. ($args{info}{set_name} ? "with set name '$args{info}{set_name}'" : "with set_id '$args{info}{set_id}'")
380+
. ' and set version '
381381
. ($args{info}{set_version} // 0))
382382
unless defined($user_set);
383383

lib/WeBWorK3.pm

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -174,8 +174,16 @@ sub problemSetRoutes ($app, $course_routes) {
174174
$course_routes->get('/sets/:set_id/users')->to('ProblemSet#getUserSets');
175175
$course_routes->get('/sets/:set_id/users/:course_user_id')->to('ProblemSet#getUserSet');
176176
$course_routes->post('/sets/:set_id/users')->to('ProblemSet#addUserSet');
177-
$course_routes->put('/sets/:set_id/users/:course_user_id')->to('ProblemSet#updateUserSet');
178-
$course_routes->delete('/sets/:set_id/users/:course_user_id')->to('ProblemSet#deleteUserSet');
177+
178+
# User sets that will default to set_version of 0
179+
$course_routes->get('/sets/:set_id/users/:user_id')->to('ProblemSet#getUserSet');
180+
$course_routes->put('/sets/:set_id/users/:user_id')->to('ProblemSet#updateUserSet');
181+
$course_routes->delete('/sets/:set_id/users/:user_id')->to('ProblemSet#deleteUserSet');
182+
183+
# User sets for given set_version
184+
$course_routes->get('/sets/:set_id/users/:user_id/v/:set_version')->to('ProblemSet#getUserSet');
185+
$course_routes->put('/sets/:set_id/users/:user_id/v/:set_version')->to('ProblemSet#updateUserSet');
186+
$course_routes->delete('/sets/:set_id/users/:user_id/v/:set_version')->to('ProblemSet#deleteUserSet');
179187

180188
$course_routes->get('/users/:user_id/sets')->to('ProblemSet#getUserSets');
181189
return;

lib/WeBWorK3/Controller/ProblemSet.pm

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -109,9 +109,10 @@ sub getUserSets ($self) {
109109
sub getUserSet ($self) {
110110
my $user_set = $self->schema->resultset('UserSet')->getUserSet(
111111
info => {
112-
course_id => int($self->param('course_id')),
113-
set_id => int($self->param('set_id')),
114-
course_user_id => int($self->param('course_user_id'))
112+
course_id => int($self->param('course_id')),
113+
set_id => int($self->param('set_id')),
114+
user_id => int($self->param('user_id')),
115+
set_version => int($self->param('set_version') // 0)
115116
}
116117
);
117118
$self->render(json => $user_set);
@@ -133,9 +134,10 @@ sub addUserSet ($self) {
133134
sub updateUserSet ($self) {
134135
my $updated_user_set = $self->schema->resultset('UserSet')->updateUserSet(
135136
info => {
136-
course_id => int($self->param('course_id')),
137-
set_id => int($self->param('set_id')),
138-
course_user_id => int($self->param('course_user_id'))
137+
course_id => int($self->param('course_id')),
138+
set_id => int($self->param('set_id')),
139+
user_id => int($self->param('user_id')),
140+
set_version => int($self->param('set_version') // 0)
139141
},
140142
params => $self->req->json
141143
);
@@ -146,10 +148,12 @@ sub updateUserSet ($self) {
146148
sub deleteUserSet ($self) {
147149
$self->schema->resultset('UserSet')->deleteUserSet(
148150
info => {
149-
course_id => int($self->param('course_id')),
150-
set_id => int($self->param('set_id')),
151-
course_user_id => int($self->param('course_user_id'))
152-
}
151+
course_id => int($self->param('course_id')),
152+
set_id => int($self->param('set_id')),
153+
user_id => int($self->param('user_id')),
154+
set_version => int($self->param('set_version') // 0)
155+
},
156+
params => $self->req->json
153157
);
154158
$self->render(json => { message => 'The user set was successfully deleted.' });
155159
return;

src/stores/problem_sets.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -259,7 +259,7 @@ export const useProblemSetStore = defineStore('problem_sets', {
259259
const sessionStore = useSessionStore();
260260
const course_id = sessionStore.course.course_id;
261261
const response = await api.put(`courses/${course_id}/sets/${set.set_id ?? 0}/users/${
262-
set.course_user_id ?? 0}`, set.toObject(UserSet.ALL_FIELDS));
262+
set.user_id ?? 0}`, set.toObject(UserSet.ALL_FIELDS));
263263
const updated_user_set = parseDBUserSet(response.data as ParseableDBUserSet);
264264

265265
// TODO: check for errors
@@ -275,7 +275,7 @@ export const useProblemSetStore = defineStore('problem_sets', {
275275
async deleteUserSet(user_set: UserSet): Promise<void> {
276276
const course_id = useSessionStore().course.course_id;
277277
const response = await
278-
api.delete(`courses/${course_id}/sets/${user_set.set_id}/users/${user_set.course_user_id ?? 0}`);
278+
api.delete(`courses/${course_id}/sets/${user_set.set_id}/users/${user_set.user_id ?? 0}`);
279279
if (response.status === 200) {
280280
const index = this.db_user_sets.findIndex((set) => set.user_set_id === user_set.user_set_id);
281281
if (index < 0) {

0 commit comments

Comments
 (0)