Skip to content

Commit

Permalink
More explicit ordering of messages returned by the API
Browse files Browse the repository at this point in the history
  • Loading branch information
dhedlund committed Mar 11, 2013
1 parent 832ccf6 commit 99a978c
Show file tree
Hide file tree
Showing 4 changed files with 47 additions and 3 deletions.
2 changes: 1 addition & 1 deletion app/controllers/api/message_streams_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@ class Api::MessageStreamsController < ApiController
respond_to :json

def index
@message_streams = MessageStream.scoped
@message_streams = MessageStream.order(:name)
end
end
2 changes: 1 addition & 1 deletion app/models/message_stream.rb
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
class MessageStream < ActiveRecord::Base
has_many :messages
has_many :messages, :order => 'offset_days, name'

validates :name, :presence => true, :uniqueness => true
validates :title, :presence => true
Expand Down
31 changes: 30 additions & 1 deletion test/functional/api/message_streams_controller_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,35 @@ class Api::MessageStreamsControllerTest < ActionController::TestCase
assert_nothing_raised { JSON::Schema.validate(json_response, schema) }
end

test "GET /api/message_streams returns streams in name order" do
streams = %w(n1 n4 n2 n3).map {|n| FactoryGirl.create(:message_stream, :name => n) }
streams.map {|s| FactoryGirl.create(:message, :message_stream => s) }

get :index, :format => :json

names = json_response.map {|o| o['message_stream']['name'] }
assert_equal %w(n1 n2 n3 n4), names
end

test "GET /api/message_streams returns messages in offset_days, name order" do
stream = FactoryGirl.create(:message_stream)
[[2, 'n4'], [2, 'n2'], [2, 'n8'], [0, 'n1'], [9, 'n3']].map do |offset_days,name|
FactoryGirl.create(:message,
:message_stream => stream,
:name => name,
:offset_days => offset_days
)
end

get :index, :format => :json

messages = json_response[0]['message_stream']['messages'].map {|o| o['message'] }
actual = messages.map {|m| [m['offset_days'], m['name']] }

expected = [[0, 'n1'], [2, 'n2'], [2, 'n4'], [2, 'n8'], [9, 'n3']]
assert_equal expected, actual
end

test "GET /api/message_streams contains all expected values" do
streams = 2.times.map { FactoryGirl.create(:message_stream) }
messages = 3.times.map { FactoryGirl.create(:message, :message_stream => streams[0]) }
Expand All @@ -67,7 +96,7 @@ class Api::MessageStreamsControllerTest < ActionController::TestCase

get :index, :format => :json

data = streams.map { |stream| {
data = streams.sort_by(&:name).map { |stream| {
'message_stream' => {
'name' => stream.name,
'title' => stream.title,
Expand Down
15 changes: 15 additions & 0 deletions test/unit/message_stream_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,21 @@ class MessageStreamTest < ActiveSupport::TestCase
end
end

test "messages should be ordered by offset_days then by name" do
@stream.save!
[[2, 'n4'], [2, 'n2'], [2, 'n8'], [0, 'n1'], [9, 'n3']].map do |offset_days,name|
FactoryGirl.create(:message,
:message_stream => @stream,
:name => name,
:offset_days => offset_days
)
end

actual = @stream.messages.map {|m| [m.offset_days, m.name] }
expected = [[0, 'n1'], [2, 'n2'], [2, 'n4'], [2, 'n8'], [9, 'n3']]
assert_equal expected, actual
end

#----------------------------------------------------------------------------#
# name:
#------
Expand Down

0 comments on commit 99a978c

Please sign in to comment.