ver las ultimas posiciones closes #6
This commit is contained in:
parent
096c9384a0
commit
bc83b7a6c7
5 changed files with 74 additions and 3 deletions
|
@ -16,4 +16,15 @@ class Posicion < ApplicationRecord
|
|||
|
||||
# Solo puede tener alguno de los estados definidos
|
||||
validates :estado, inclusion: { in: Posicion::ESTADOS }
|
||||
|
||||
# Obtener las últimas posiciones por cada pirata. Para no hacer
|
||||
# consultas complejas, obtenemos primero los IDs de las posiciones y
|
||||
# luego traemos solo esas.
|
||||
scope :ultimas, lambda {
|
||||
ids = select('id, max(created_at) as created_at')
|
||||
.group(:pirata_id)
|
||||
.collect(&:id)
|
||||
|
||||
where(id: ids)
|
||||
}
|
||||
end
|
||||
|
|
|
@ -2,4 +2,8 @@
|
|||
|
||||
json.call(consenso, :id, :created_at, :titulo, :texto)
|
||||
|
||||
json.posiciones consenso.posiciones, partial: 'posiciones/posicion', as: :posicion
|
||||
ultimas ||= false
|
||||
posiciones = consenso.posiciones
|
||||
posiciones = posiciones.ultimas if ultimas
|
||||
|
||||
json.posiciones posiciones, partial: 'posiciones/posicion', as: :posicion
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
json.consensos @consensos, partial: 'consensos/consenso', as: :consenso
|
||||
json.consensos @consensos, partial: 'consensos/consenso', as: :consenso,
|
||||
locals: { ultimas: true }
|
||||
|
|
|
@ -8,7 +8,9 @@ class ConsensosControllerTest < ActionDispatch::IntegrationTest
|
|||
end
|
||||
|
||||
test 'se pueden mostrar' do
|
||||
2.times { create :consenso }
|
||||
2.times do
|
||||
create :consenso
|
||||
end
|
||||
|
||||
get consensos_url, as: :json, headers: @auth
|
||||
body = JSON.parse(@response.body)
|
||||
|
@ -17,6 +19,24 @@ class ConsensosControllerTest < ActionDispatch::IntegrationTest
|
|||
assert_equal 2, body['consensos'].size
|
||||
end
|
||||
|
||||
test 'al mostrar solo se ven las posiciones resumidas' do
|
||||
2.times do
|
||||
consenso = create :consenso
|
||||
pirata = create :pirata
|
||||
|
||||
3.times do
|
||||
create :posicion, consenso: consenso, pirata: pirata
|
||||
end
|
||||
end
|
||||
|
||||
get consensos_url, as: :json, headers: @auth
|
||||
body = JSON.parse(@response.body)
|
||||
|
||||
body['consensos'].each do |consenso|
|
||||
assert_equal 1, consenso['posiciones'].count
|
||||
end
|
||||
end
|
||||
|
||||
test 'se puede ver uno solo' do
|
||||
consenso = create :consenso, con_posiciones: 2
|
||||
|
||||
|
@ -28,6 +48,20 @@ class ConsensosControllerTest < ActionDispatch::IntegrationTest
|
|||
assert_equal 2, body['posiciones'].size
|
||||
end
|
||||
|
||||
test 'al ver uno solo se ve todo el historial de posiciones' do
|
||||
consenso = create :consenso
|
||||
pirata = create :pirata
|
||||
|
||||
3.times do
|
||||
create :posicion, consenso: consenso, pirata: pirata
|
||||
end
|
||||
|
||||
get consenso_url(consenso), as: :json, headers: @auth
|
||||
body = JSON.parse(@response.body)
|
||||
|
||||
assert_equal 3, body['posiciones'].size
|
||||
end
|
||||
|
||||
test 'se pueden crear' do
|
||||
post consensos_url, as: :json, headers: @auth, params: {
|
||||
consenso: {
|
||||
|
|
|
@ -8,4 +8,25 @@ class PosicionTest < ActiveSupport::TestCase
|
|||
|
||||
assert_equal true, posicion.valid?
|
||||
end
|
||||
|
||||
test 'se pueden saber las últimas' do
|
||||
consenso = create :consenso
|
||||
piratas = []
|
||||
2.times do
|
||||
piratas.push create :pirata
|
||||
end
|
||||
|
||||
5.times do
|
||||
create :posicion,
|
||||
pirata: piratas.sample,
|
||||
consenso: consenso,
|
||||
created_at: (1..100).to_a.sample.days.ago
|
||||
end
|
||||
|
||||
posicion1 = create :posicion, pirata: piratas.first, consenso: consenso
|
||||
posicion2 = create :posicion, pirata: piratas.last, consenso: consenso
|
||||
|
||||
assert_equal [posicion1.id, posicion2.id].sort,
|
||||
consenso.posiciones.ultimas.collect(&:id).sort
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue