Skip to content

Commit

Permalink
Add endpoint for the last hour's submissions
Browse files Browse the repository at this point in the history
  • Loading branch information
nygrenh committed Nov 30, 2017
1 parent 23be035 commit afe63bc
Show file tree
Hide file tree
Showing 4 changed files with 88 additions and 0 deletions.
1 change: 1 addition & 0 deletions app/controllers/api/v8/apidocs_controller.rb
Expand Up @@ -150,6 +150,7 @@ class ApidocsController < ActionController::Base
Api::V8::Courses::ExercisesController,
Api::V8::Courses::Exercises::PointsController,
Api::V8::Courses::Exercises::Users::PointsController,
Api::V8::Courses::Submissions::LastHourController,
Api::V8::Courses::Users::PointsController,
Api::V8::Courses::Users::SubmissionsController,
Api::V8::OrganizationsController,
Expand Down
42 changes: 42 additions & 0 deletions app/controllers/api/v8/courses/submissions/last_hour_controller.rb
@@ -0,0 +1,42 @@
module Api
module V8
module Courses
module Submissions
class LastHourController < Api::V8::BaseController
include Swagger::Blocks

swagger_path '/api/v8/courses/{course_id}/submissions/last_hour' do
operation :get do
key :description, 'Returns submissions to the course in the latest hour'
key :produces, ['application/json']
key :tags, ['submission']
parameter '$ref': '#/parameters/path_course_id'
response 403, '$ref': '#/responses/error'
response 404, '$ref': '#/responses/error'
response 200 do
key :description, 'Submission ids'
schema do
key :type, :array
items do
key :type, :integer
end
end
end
end
end

skip_authorization_check

def index
return respond_access_denied unless current_user.administrator?
course = Course.find(params[:course_id])

current_time = Time.current
ids = course.submissions.where(created_at: (current_time - 1.hour)..current_time).ids
present(ids)
end
end
end
end
end
end
5 changes: 5 additions & 0 deletions config/routes.rb
Expand Up @@ -80,6 +80,11 @@
end

resources :submissions, module: :courses, only: :index

namespace :submissions, module: :courses do
resources :last_hour, module: :submissions, only: :index
end

resources :users, module: :courses, only: [] do
resources :submissions, module: :users, only: :index
end
Expand Down
@@ -0,0 +1,40 @@
require 'spec_helper'
require 'json'

describe Api::V8::Courses::Submissions::LastHourController, type: :controller do
let!(:course) { FactoryGirl.create(:course) }
let(:regular_user) { FactoryGirl.create(:user) }
let(:admin_user) { FactoryGirl.create(:admin) }

let!(:submission_1) { FactoryGirl.create(:submission, course: course) }
let!(:submission_2) { FactoryGirl.create(:submission, course: course) }
let!(:submission_3) { FactoryGirl.create(:submission, course: course, created_at: Time.current - 2.hours) }

before(:each) do
controller.stub(:doorkeeper_token) { token }
end

describe 'index' do
context 'as a regular user' do
let!(:token) { double resource_owner_id: regular_user.id, acceptable?: true }

it 'should not allow access' do
get :index, course_id: course.id
expect(response).to have_http_status(:unauthorized)
end
end

context 'as an admin' do
let!(:token) { double resource_owner_id: admin_user.id, acceptable?: true }

it 'gives submission ids for the last hour' do
get :index, course_id: course.id
expect(response).to have_http_status(:ok)
res = JSON.parse(response.body)
expect(res.length).to eq(2)
expect(res).to include(submission_1.id)
expect(res).not_to include(submission_3.id)
end
end
end
end

0 comments on commit afe63bc

Please sign in to comment.