require 'rails_helper' describe Mood do let(:user) { create(:user) } let(:mode) { create(:mode, user: user) } subject { build(:mood, user: user, mode: mode, recorded_at: DateTime.parse("2026-01-15 10:00:00")) } it { is_expected.to be_valid } describe "validations" do it "is invalid without a user" do subject.user = nil expect(subject).not_to be_valid end it "is invalid without a mode" do subject.mode = nil expect(subject).not_to be_valid end it "is invalid without a recorded_at" do subject.recorded_at = nil expect(subject).not_to be_valid end end describe "uniqueness per day and user" do it "is invalid if a mood already exists for the same day and user" do create(:mood, user: user, mode: mode, recorded_at: DateTime.parse("2026-01-15 18:00:00")) expect(subject).not_to be_valid end it "is valid if the same day exists but for a different user" do other_user = create(:user) other_mode = create(:mode, user: other_user) create(:mood, user: other_user, mode: other_mode, recorded_at: DateTime.parse("2026-01-15 10:00:00")) expect(subject).to be_valid end it "is valid if the same user has a mood on a different day" do create(:mood, user: user, mode: mode, recorded_at: DateTime.parse("2026-01-14 10:00:00")) expect(subject).to be_valid end end end