|
44 | 44 | outside_deadline = latest_workshops.last.workshop.date_and_time |
45 | 45 | within_deadline = latest_workshops.fifth.workshop.date_and_time |
46 | 46 |
|
47 | | - old_note = Fabricate.create(:member_note, member: member, created_at: outside_deadline) |
| 47 | + Fabricate.create(:member_note, member: member, created_at: outside_deadline) |
48 | 48 | new_note = Fabricate.create(:member_note, member: member, created_at: within_deadline) |
49 | 49 |
|
50 | 50 | expect(member.recent_notes.to_a).to eq([new_note]) |
|
210 | 210 | expect(managers.size).to eq(managers.distinct.size) |
211 | 211 | end |
212 | 212 | end |
| 213 | + |
| 214 | + describe '#attending_event_ids' do |
| 215 | + let(:member) { Fabricate(:member) } |
| 216 | + |
| 217 | + it 'returns event IDs where member has accepted invitation' do |
| 218 | + event = Fabricate(:event) |
| 219 | + Fabricate(:invitation, member: member, event: event, attending: true) |
| 220 | + expect(member.attending_event_ids).to include(event.id) |
| 221 | + end |
| 222 | + |
| 223 | + it 'does not include events where invitation is not accepted' do |
| 224 | + event = Fabricate(:event) |
| 225 | + Fabricate(:invitation, member: member, event: event, attending: false) |
| 226 | + expect(member.attending_event_ids).not_to include(event.id) |
| 227 | + end |
| 228 | + |
| 229 | + it 'includes workshop IDs' do |
| 230 | + workshop = Fabricate(:workshop) |
| 231 | + Fabricate(:workshop_invitation, member: member, workshop: workshop, attending: true) |
| 232 | + expect(member.attending_event_ids).to include(workshop.id) |
| 233 | + end |
| 234 | + |
| 235 | + it 'includes meeting IDs' do |
| 236 | + meeting = Fabricate(:meeting) |
| 237 | + Fabricate(:meeting_invitation, member: member, meeting: meeting, attending: true) |
| 238 | + expect(member.attending_event_ids).to include(meeting.id) |
| 239 | + end |
| 240 | + |
| 241 | + it 'caches result in instance variable' do |
| 242 | + event = Fabricate(:event) |
| 243 | + Fabricate(:invitation, member: member, event: event, attending: true) |
| 244 | + first_call = member.attending_event_ids |
| 245 | + expect(member.attending_event_ids).to equal(first_call) |
| 246 | + end |
| 247 | + |
| 248 | + it 'can be cleared and re-queries on next call' do |
| 249 | + event = Fabricate(:event) |
| 250 | + Fabricate(:invitation, member: member, event: event, attending: true) |
| 251 | + member.attending_event_ids |
| 252 | + member.clear_attending_event_ids_cache! |
| 253 | + expect(member.attending_event_ids).to include(event.id) |
| 254 | + end |
| 255 | + end |
213 | 256 | end |
0 commit comments