Skip to content

Commit 6948b58

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 a42c63d commit 6948b58

30 files changed

+748
-159
lines changed

conf/permissions.dist.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,10 @@ db_permissions:
100100
allowed_roles: ['course_admin', 'instructor']
101101
getUserSets:
102102
allowed_roles: ['course_admin', 'instructor']
103+
allow_self_access: true
104+
getUserSet:
105+
allowed_roles: ['course_admin', 'instructor']
106+
allow_self_access: true
103107
addUserSet:
104108
allowed_roles: ['course_admin', 'instructor']
105109
updateUserSet:

lib/DB/Schema/ResultSet/ProblemPool.pm

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -333,6 +333,7 @@ sub getPoolProblem ($self, %args) {
333333
. ' is not in the pool named \''
334334
. $problem_pool->pool_name
335335
. "'");
336+
return;
336337
} else {
337338
# Pick a random problem.
338339
my $prob = $pool_problems[ rand @pool_problems ];
@@ -434,12 +435,8 @@ remove a Problem out of a ProblemPool in a course
434435
=cut
435436

436437
sub removePoolProblem ($self, %args) {
437-
my $prob = $self->getPoolProblem(info => $args{info}, as_result_set => 1);
438-
DB::Exception::PoolProblemNotInPool->throw(info => $args{info}) unless defined($prob);
439-
440-
my $prob2 = $prob->delete;
441-
return $prob2 if $args{as_result_set};
442-
return { $prob2->get_inflated_columns };
438+
$self->getPoolProblem(info => $args{info}, as_result_set => 1)->delete;
439+
return;
443440
}
444441

445442
# just a small subroutine to shorten access to the db.

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
@@ -173,8 +173,16 @@ sub problemSetRoutes ($app, $course_routes) {
173173
$course_routes->get('/user-sets')->to('ProblemSet#getAllUserSets');
174174
$course_routes->get('/sets/:set_id/users')->to('ProblemSet#getUserSets');
175175
$course_routes->post('/sets/:set_id/users')->to('ProblemSet#addUserSet');
176-
$course_routes->put('/sets/:set_id/users/:course_user_id')->to('ProblemSet#updateUserSet');
177-
$course_routes->delete('/sets/:set_id/users/:course_user_id')->to('ProblemSet#deleteUserSet');
176+
177+
# User sets that will default to set_version of 0
178+
$course_routes->get('/sets/:set_id/users/:user_id')->to('ProblemSet#getUserSet');
179+
$course_routes->put('/sets/:set_id/users/:user_id')->to('ProblemSet#updateUserSet');
180+
$course_routes->delete('/sets/:set_id/users/:user_id')->to('ProblemSet#deleteUserSet');
181+
182+
# User sets for given set_version
183+
$course_routes->get('/sets/:set_id/users/:user_id/v/:set_version')->to('ProblemSet#getUserSet');
184+
$course_routes->put('/sets/:set_id/users/:user_id/v/:set_version')->to('ProblemSet#updateUserSet');
185+
$course_routes->delete('/sets/:set_id/users/:user_id/v/:set_version')->to('ProblemSet#deleteUserSet');
178186

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

lib/WeBWorK3/Controller/Course.pm

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,8 @@ sub addCourse ($c) {
3232
}
3333

3434
sub deleteCourse ($c) {
35-
my $course =
36-
$c->schema->resultset('Course')->deleteCourse(info => { course_id => int($c->param('course_id')) });
37-
$c->render(json => $course);
35+
$c->schema->resultset('Course')->deleteCourse(info => { course_id => int($c->param('course_id')) });
36+
$c->render(json => { message => 'The course was successfully deleted.' });
3837
return;
3938
}
4039

lib/WeBWorK3/Controller/Problem.pm

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -55,14 +55,14 @@ sub updateProblem ($c) {
5555
}
5656

5757
sub deleteProblem ($c) {
58-
my $deleted_problem = $c->schema->resultset('SetProblem')->deleteSetProblem(
58+
$c->schema->resultset('SetProblem')->deleteSetProblem(
5959
info => {
6060
course_id => int($c->param('course_id')),
6161
set_id => int($c->param('set_id')),
6262
set_problem_id => int($c->param('set_problem_id'))
6363
}
6464
);
65-
$c->render(json => $deleted_problem);
65+
$c->render(json => { message => 'The problem was successfully deleted.' });
6666
return;
6767
}
6868

@@ -142,15 +142,15 @@ sub updateUserProblem ($c) {
142142
}
143143

144144
sub deleteUserProblem ($c) {
145-
my $deleted_problem = $c->schema->resultset('UserProblem')->deleteUserProblem(
145+
$c->schema->resultset('UserProblem')->deleteUserProblem(
146146
info => {
147147
course_id => int($c->param('course_id')),
148148
set_id => int($c->param('set_id')),
149149
user_id => int($c->param('user_id')),
150150
user_problem_id => int($c->param('user_problem_id'))
151151
}
152152
);
153-
$c->render(json => $deleted_problem);
153+
$c->render(json => { message => 'The user problem was successfully deleted.' });
154154
return;
155155
}
156156

@@ -204,14 +204,14 @@ sub updateProblemPool ($c) {
204204
}
205205

206206
sub deleteProblemPool ($c) {
207-
my $problem_pool = $c->schema->resultset('ProblemPool')->deleteProblemPool(
207+
$c->schema->resultset('ProblemPool')->deleteProblemPool(
208208
info => {
209209
course_id => int($c->param('course_id')),
210210
problem_pool_id => int($c->param('problem_pool_id')),
211211
},
212212
params => $c->req->json
213213
);
214-
$c->render(json => $problem_pool);
214+
$c->render(json => { message => 'The problem pool was successfully deleted.' });
215215
return;
216216
}
217217

@@ -261,14 +261,13 @@ sub updatePoolProblem ($c) {
261261
}
262262

263263
sub removePoolProblem ($c) {
264-
my $problem_pool = $c->schema->resultset('ProblemPool')->removePoolProblem(
264+
$c->schema->resultset('ProblemPool')->removePoolProblem(
265265
info => {
266266
course_id => int($c->param('course_id')),
267267
problem_pool_id => int($c->param('problem_pool_id')),
268-
},
269-
params => $c->req->json
268+
}
270269
);
271-
$c->render(json => $problem_pool);
270+
$c->render(json => { message => 'The pool problem was successfully removed.' });
272271
return;
273272
}
274273

lib/WeBWorK3/Controller/ProblemSet.pm

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -62,13 +62,13 @@ sub addProblemSet ($self) {
6262
}
6363

6464
sub deleteProblemSet ($self) {
65-
my $problem_set = $self->schema->resultset('ProblemSet')->deleteProblemSet(
65+
$self->schema->resultset('ProblemSet')->deleteProblemSet(
6666
info => {
6767
course_id => int($self->param('course_id')),
6868
set_id => int($self->param('set_id'))
6969
}
7070
);
71-
$self->render(json => $problem_set);
71+
$self->render(json => { message => 'The problem set was successfully deleted.' });
7272
return;
7373
}
7474

@@ -106,6 +106,19 @@ sub getUserSets ($self) {
106106
return;
107107
}
108108

109+
sub getUserSet ($self) {
110+
my $user_set = $self->schema->resultset('UserSet')->getUserSet(
111+
info => {
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)
116+
}
117+
);
118+
$self->render(json => $user_set);
119+
return;
120+
}
121+
109122
sub addUserSet ($self) {
110123
my $new_user_set = $self->schema->resultset('UserSet')->addUserSet(
111124
params => {
@@ -121,9 +134,10 @@ sub addUserSet ($self) {
121134
sub updateUserSet ($self) {
122135
my $updated_user_set = $self->schema->resultset('UserSet')->updateUserSet(
123136
info => {
124-
course_id => int($self->param('course_id')),
125-
set_id => int($self->param('set_id')),
126-
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)
127141
},
128142
params => $self->req->json
129143
);
@@ -132,15 +146,16 @@ sub updateUserSet ($self) {
132146
}
133147

134148
sub deleteUserSet ($self) {
135-
my $updated_user_set = $self->schema->resultset('UserSet')->deleteUserSet(
149+
$self->schema->resultset('UserSet')->deleteUserSet(
136150
info => {
137-
course_id => int($self->param('course_id')),
138-
set_id => int($self->param('set_id')),
139-
course_user_id => int($self->param('course_user_id'))
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)
140155
},
141156
params => $self->req->json
142157
);
143-
$self->render(json => $updated_user_set);
158+
$self->render(json => { message => 'The user set was successfully deleted.' });
144159
return;
145160
}
146161

lib/WeBWorK3/Controller/User.pm

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ sub addGlobalUser ($c) {
4848

4949
sub deleteGlobalUser ($c) {
5050
my $user = $c->schema->resultset('User')->deleteGlobalUser(info => { user_id => int($c->param('user_id')) });
51-
$c->render(json => $user);
51+
$c->render(json => { message => 'The global user was successfully deleted.' });
5252
return;
5353
}
5454

@@ -132,7 +132,7 @@ sub deleteCourseUser ($c) {
132132
user_id => int($c->param('user_id'))
133133
}
134134
);
135-
$c->render(json => $course_user);
135+
$c->render(json => { message => 'The course user was successfully deleted.' });
136136
return;
137137
}
138138

src/stores/courses.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -77,13 +77,11 @@ export const useCourseStore = defineStore('courses', {
7777
/**
7878
* This deletes the course in the database and the store.
7979
*/
80-
async deleteCourse(course: Course): Promise<Course | undefined> {
80+
async deleteCourse(course: Course): Promise<void> {
8181
const response = await api.delete(`courses/${course.course_id}`);
8282
if (response.status === 200) {
83-
const deleted_course = new Course(response.data as ParseableCourse);
84-
const index = this.courses.findIndex(course => course.course_id === deleted_course.course_id);
83+
const index = this.courses.findIndex(c => c.course_id === course.course_id);
8584
this.courses.splice(index, 1);
86-
return deleted_course;
8785
} else {
8886
throw response.data as ResponseError;
8987
}

0 commit comments

Comments
 (0)