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
|
# Solo puede tener alguno de los estados definidos
|
||||||
validates :estado, inclusion: { in: Posicion::ESTADOS }
|
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
|
end
|
||||||
|
|
|
@ -2,4 +2,8 @@
|
||||||
|
|
||||||
json.call(consenso, :id, :created_at, :titulo, :texto)
|
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
|
# 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
|
end
|
||||||
|
|
||||||
test 'se pueden mostrar' do
|
test 'se pueden mostrar' do
|
||||||
2.times { create :consenso }
|
2.times do
|
||||||
|
create :consenso
|
||||||
|
end
|
||||||
|
|
||||||
get consensos_url, as: :json, headers: @auth
|
get consensos_url, as: :json, headers: @auth
|
||||||
body = JSON.parse(@response.body)
|
body = JSON.parse(@response.body)
|
||||||
|
@ -17,6 +19,24 @@ class ConsensosControllerTest < ActionDispatch::IntegrationTest
|
||||||
assert_equal 2, body['consensos'].size
|
assert_equal 2, body['consensos'].size
|
||||||
end
|
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
|
test 'se puede ver uno solo' do
|
||||||
consenso = create :consenso, con_posiciones: 2
|
consenso = create :consenso, con_posiciones: 2
|
||||||
|
|
||||||
|
@ -28,6 +48,20 @@ class ConsensosControllerTest < ActionDispatch::IntegrationTest
|
||||||
assert_equal 2, body['posiciones'].size
|
assert_equal 2, body['posiciones'].size
|
||||||
end
|
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
|
test 'se pueden crear' do
|
||||||
post consensos_url, as: :json, headers: @auth, params: {
|
post consensos_url, as: :json, headers: @auth, params: {
|
||||||
consenso: {
|
consenso: {
|
||||||
|
|
|
@ -8,4 +8,25 @@ class PosicionTest < ActiveSupport::TestCase
|
||||||
|
|
||||||
assert_equal true, posicion.valid?
|
assert_equal true, posicion.valid?
|
||||||
end
|
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
|
end
|
||||||
|
|
Loading…
Reference in a new issue