-
Notifications
You must be signed in to change notification settings - Fork 0
/
movie_spec.rb
100 lines (80 loc) · 2.84 KB
/
movie_spec.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
require 'rails_helper'
RSpec.describe Movie, type: :model do
let(:user) { create(:user) }
let(:user2) {create(:user)}
let(:movie) { create(:movie) }
let(:movie2) { create(:movie) }
let(:list) { create(:list, owner_id: user.id) }
let(:listing) { create(:listing,
movie_id: movie2.id,
list_id: list.id,
user_id: user.id) }
let(:invalid_movie) { build(:invalid_movie) }
let(:fargo) { create(:movie,
title: "Fargo",
runtime: 90,
vote_average: 8,
release_date: Date.today - 8000,
tmdb_id: 275) }
let(:no_country) { create(:movie,
title: "No Country for Old Men",
runtime: 100,
vote_average: 9,
release_date: Date.today - 6000) }
let(:fargo_listing) { create(:listing,
list_id: list.id,
movie_id: fargo.id,
priority: 9,
created_at: 1.day.ago) }
let(:no_country_listing) { create(:listing,
list_id: list.id,
movie_id: no_country.id,
priority: 8,
created_at: 3.days.ago) }
let(:fargo_screening) {create(:screening,
user: user,
movie: fargo)}
let(:membership1) {create(:membership,
member: user,
list: list)}
let(:membership2) {create(:membership,
member: user2,
list: list)}
it { is_expected.to validate_presence_of(:tmdb_id) }
context "with a valid factory" do
it "has a valid factory" do
expect(movie).to be_valid
end
it { is_expected.to have_many(:listings) }
it { is_expected.to have_many(:lists) }
end #valid factory context
it "is invalid without a tmdb_id" do
expect(invalid_movie).not_to be_valid
end
describe 'Sorting' do
before do
fargo_listing; no_country_listing
end
it 'sorts by highest priority' do
expect(Movie.by_highest_priority(list).first).to eq(fargo)
end
it 'sorts by recently added' do
expect(Movie.by_recently_added(list).first).to eq(fargo)
end
context 'with screenings' do
before do
user.screenings << fargo_screening
membership1; membership2
end
it 'sorts by watched by user' do
expect(Movie.by_watched_by_user(list, user).first).to eq(fargo)
end
it 'sorts by watched by members' do
expect(Movie.by_watched_by_members(list).first).to eq(fargo)
end
it 'sorts by unwatched by user' do
expect(Movie.by_unwatched_by_user(list, user).first).to eq(no_country)
end
end
end
end