108 lines
3.5 KiB
Ruby
108 lines
3.5 KiB
Ruby
require 'rails_helper'
|
|
|
|
describe "DayLogs", type: :request do
|
|
let(:user) { create(:user) }
|
|
let(:mode) { create(:mode, user: user) }
|
|
let(:day) { Date.parse("2026-01-15") }
|
|
|
|
describe "GET /day_logs/new" do
|
|
context "when not authenticated" do
|
|
it "redirects to the login page" do
|
|
get new_day_log_path
|
|
expect(response).to redirect_to(new_session_path)
|
|
end
|
|
end
|
|
|
|
context "when authenticated" do
|
|
before { login_as(user) }
|
|
|
|
it "returns http success" do
|
|
get new_day_log_path
|
|
expect(response).to have_http_status(:success)
|
|
end
|
|
end
|
|
end
|
|
|
|
describe "POST /day_logs" do
|
|
context "when not authenticated" do
|
|
it "redirects to the login page" do
|
|
post day_logs_path, params: { day_log: { day: day, info: "Une info" } }
|
|
expect(response).to redirect_to(new_session_path)
|
|
end
|
|
end
|
|
|
|
context "when authenticated" do
|
|
before { login_as(user) }
|
|
|
|
context "with valid params" do
|
|
context "without mode" do
|
|
it "creates a day_log" do
|
|
expect {
|
|
post day_logs_path, params: { day_log: { day: day, info: "Une info" } }
|
|
}.to change(DayLog, :count).by(1)
|
|
end
|
|
|
|
it "does not create a mood" do
|
|
expect {
|
|
post day_logs_path, params: { day_log: { day: day, info: "Une info" } }
|
|
}.not_to change(Mood, :count)
|
|
end
|
|
end
|
|
|
|
context "with mode, no existing mood" do
|
|
it "creates a day_log" do
|
|
expect {
|
|
post day_logs_path, params: { day_log: { day: day, info: "Une info", mode_id: mode.id } }
|
|
}.to change(DayLog, :count).by(1)
|
|
end
|
|
|
|
it "creates a mood" do
|
|
expect {
|
|
post day_logs_path, params: { day_log: { day: day, info: "Une info", mode_id: mode.id } }
|
|
}.to change(Mood, :count).by(1)
|
|
end
|
|
end
|
|
|
|
context "with mode, existing mood" do
|
|
let!(:existing_mood) { create(:mood, user: user, mode: mode, recorded_at: DateTime.parse("2026-01-15 08:00:00")) }
|
|
let(:other_mode) { create(:mode, user: user) }
|
|
|
|
it "creates a day_log" do
|
|
expect {
|
|
post day_logs_path, params: { day_log: { day: day, info: "Une info", mode_id: other_mode.id } }
|
|
}.to change(DayLog, :count).by(1)
|
|
end
|
|
|
|
it "does not create a new mood" do
|
|
expect {
|
|
post day_logs_path, params: { day_log: { day: day, info: "Une info", mode_id: other_mode.id } }
|
|
}.not_to change(Mood, :count)
|
|
end
|
|
|
|
it "updates the existing mood mode" do
|
|
post day_logs_path, params: { day_log: { day: day, info: "Une info", mode_id: other_mode.id } }
|
|
expect(existing_mood.reload.mode).to eq(other_mode)
|
|
end
|
|
end
|
|
|
|
it "redirects after creation" do
|
|
post day_logs_path, params: { day_log: { day: day, info: "Une info" } }
|
|
expect(response).to have_http_status(:redirect)
|
|
end
|
|
end
|
|
|
|
context "with invalid params" do
|
|
it "does not create a day_log" do
|
|
expect {
|
|
post day_logs_path, params: { day_log: { day: nil, info: nil } }
|
|
}.not_to change(DayLog, :count)
|
|
end
|
|
|
|
it "returns unprocessable entity" do
|
|
post day_logs_path, params: { day_log: { day: nil, info: nil } }
|
|
expect(response).to have_http_status(:unprocessable_entity)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|