-
Notifications
You must be signed in to change notification settings - Fork 92
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Filter tomatoes by creation date #255
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -4,7 +4,10 @@ class TomatoesController < BaseController | |
before_action :find_tomato, only: [:show, :update, :destroy] | ||
|
||
def index | ||
@tomatoes = current_user.tomatoes.order_by([[:created_at, :desc], [:_id, :desc]]).page params[:page] | ||
@tomatoes = current_user.tomatoes | ||
@tomatoes = @tomatoes.after(from) if from | ||
@tomatoes = @tomatoes.before(to) if to | ||
@tomatoes = @tomatoes.order_by([[:created_at, :desc], [:_id, :desc]]).page params[:page] | ||
|
||
render json: Presenter::Tomatoes.new(@tomatoes) | ||
end | ||
|
@@ -39,6 +42,14 @@ def destroy | |
|
||
private | ||
|
||
def from | ||
@from ||= Time.zone.parse(params[:from].to_s) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. How does it handle nil? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. It should work! :) 2.3.3 :001 > nil.to_s
=> ""
2.3.3 :002 > Time.zone.parse ''
=> nil There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Yes, that's how. |
||
end | ||
|
||
def to | ||
@to ||= Time.zone.parse(params[:to].to_s) | ||
end | ||
|
||
def find_tomato | ||
@tomato = current_user.tomatoes.find(params[:id]) | ||
end | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -75,7 +75,7 @@ def create | |
if @tomato.save | ||
format.js do | ||
@highlight = @tomato | ||
@tomatoes = current_user.tomatoes.after(Time.zone.now.beginning_of_day) | ||
@tomatoes = current_user.tomatoes.after(Time.zone.now.beginning_of_day).order_by([[:created_at, :desc]]) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. If you create a scope for sorting, you can reuse it here too :) |
||
@tomatoes_count = current_user.tomatoes_counters | ||
@projects = @tomatoes.collect(&:projects).flatten.uniq | ||
|
||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -6,14 +6,17 @@ class TomatoesControllerTest < ActionController::TestCase | |
@user = User.create!(name: 'name', email: '[email protected]') | ||
@user.authorizations.create!(provider: 'tomatoes', token: '123') | ||
@tomato1 = @user.tomatoes.build | ||
@tomato1.created_at = 2.hours.ago | ||
@tomato1.created_at = 3.hours.ago | ||
@tomato1.save! | ||
@tomato2 = @user.tomatoes.build(tag_list: 'one, two') | ||
@tomato2.created_at = 1.hour.ago | ||
@tomato2.created_at = 2.hours.ago | ||
@tomato2.save! | ||
@tomato3 = @user.tomatoes.build(tag_list: 'three, four') | ||
@tomato3.created_at = 1.hour.ago | ||
@tomato3.save! | ||
|
||
@other_user = User.create! | ||
@tomato3 = @other_user.tomatoes.create! | ||
@other_tomato = @other_user.tomatoes.create! | ||
end | ||
|
||
teardown do | ||
|
@@ -36,7 +39,40 @@ class TomatoesControllerTest < ActionController::TestCase | |
tomatoes_ids = parsed_response['tomatoes'].map { |t| t['id'] } | ||
assert_includes tomatoes_ids, @tomato1.id.to_s | ||
assert_includes tomatoes_ids, @tomato2.id.to_s | ||
assert_not_includes tomatoes_ids, @tomato3.id.to_s | ||
assert_includes tomatoes_ids, @tomato3.id.to_s | ||
assert_not_includes tomatoes_ids, @other_tomato.id.to_s | ||
end | ||
|
||
test 'GET /index, it should return current user\'s list of tomatoes filtered by date (from)' do | ||
get :index, token: '123', from: 150.minutes.ago.iso8601 | ||
assert_response :success | ||
assert_equal 'application/json', @response.content_type | ||
parsed_response = JSON.parse(@response.body) | ||
tomatoes_ids = parsed_response['tomatoes'].map { |t| t['id'] } | ||
assert_equal tomatoes_ids.size, 2 | ||
assert_includes tomatoes_ids, @tomato2.id.to_s | ||
assert_includes tomatoes_ids, @tomato3.id.to_s | ||
end | ||
|
||
test 'GET /index, it should return current user\'s list of tomatoes filtered by date (from, to)' do | ||
get :index, token: '123', from: 150.minutes.ago.iso8601, to: 90.minutes.ago.iso8601 | ||
assert_response :success | ||
assert_equal 'application/json', @response.content_type | ||
parsed_response = JSON.parse(@response.body) | ||
tomatoes_ids = parsed_response['tomatoes'].map { |t| t['id'] } | ||
assert_equal tomatoes_ids.size, 1 | ||
assert_includes tomatoes_ids, @tomato2.id.to_s | ||
end | ||
|
||
test 'GET /index, it should return current user\'s list of tomatoes filtered by date (to)' do | ||
get :index, token: '123', to: 90.minutes.ago.iso8601 | ||
assert_response :success | ||
assert_equal 'application/json', @response.content_type | ||
parsed_response = JSON.parse(@response.body) | ||
tomatoes_ids = parsed_response['tomatoes'].map { |t| t['id'] } | ||
assert_equal tomatoes_ids.size, 2 | ||
assert_includes tomatoes_ids, @tomato1.id.to_s | ||
assert_includes tomatoes_ids, @tomato2.id.to_s | ||
end | ||
|
||
test 'GET /show, given an invalid token, it should return an error' do | ||
|
@@ -55,7 +91,7 @@ class TomatoesControllerTest < ActionController::TestCase | |
|
||
test 'GET /show, it should not return other users\' tomatoes' do | ||
assert_raises(Mongoid::Errors::DocumentNotFound) do | ||
get :show, token: '123', id: @tomato3.id.to_s | ||
get :show, token: '123', id: @other_tomato.id.to_s | ||
end | ||
end | ||
|
||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why don't you create a scope for sorting tomatoes?