require 'spec_helper' RSpec.describe Meeting, :type => :model do let(:user){FactoryBot.create(:user)} let(:rubrik) {FactoryBot.create(:rubrik)} let(:calendar){FactoryBot.create(:calendar, rubrik_id: rubrik.id)} let(:calentry){FactoryBot.build(:calentry, calendar_id: calendar.id, typ: 2)} let(:meetingtyp){FactoryBot.create(:meetingtyp, rubrik_id: rubrik.id)} let(:meeting){FactoryBot.build(:meeting, meetingtyp_id: meetingtyp.id)} let(:object_variable) {meeting} it_behaves_like "a valid object" it "should be created" do meeting.calentry=calentry expect(meeting).to be_valid expect(meeting.save).to be true end it "should have a calendar" do meeting.calentry=calentry expect(meeting.calendar).not_to be_nil end it "should be able to create a calentry" do meeting.create_calentry meeting.calentry.start=1.hour.ago meeting.calentry.dauer=7 expect(meeting).to be_valid end context "without calentry" do # let(:meeting){FactoryBot.build(:meeting, :without_calentry, meetingtyp_id: meetingtyp.id)} it "should be creating a calentry typ 2" do meeting.create_calentry expect(meeting.calentry.typ).to be 2 end end it "should be having an alias title for text" do expect(meeting.title).to eq(meeting.text) end it "should have a text that includes the name" do expect(meeting.title).to match meeting.name end it " creates a neuigkeit that is valid" do expect(meeting.neuigkeit).to be_nil meeting.create_announcement(user) expect(meeting.neuigkeit.class).to eq(Neuigkeit) expect(meeting.neuigkeit).to be_valid end it "fixes calentry before validation" do calentry.calendar=nil meeting.calentry=calentry meeting.valid? expect(meeting.calentry.calendar).to be meeting.meetingtyp.rubrik.calendar end it "updates the announcement if there is one" do meeting.calentry=calentry expect(meeting.neuigkeit).to be_nil meeting.create_announcement(user) meeting.name="asdflkjhasdflkj" meeting.save meeting.update_announcement expect(meeting.neuigkeit.title).to match meeting.name end it "doesn't create an announcement by changing the name" do meeting.calentry=calentry expect(meeting.neuigkeit).to be_nil meeting.name="asdflkjhasdflkj" meeting.save expect(meeting.neuigkeit).to be_nil end it "can create a protocol" do expect(meeting.protocol).to be_nil meeting.create_protocol expect(meeting.protocol).not_to be_nil end it "creates a protocol only once" do meeting.create_protocol p=meeting.protocol meeting.protocol.text="TestTextTestTextForProtocol" meeting.create_protocol expect(meeting.protocol).to be p expect(meeting.protocol.text).to match "TestTextTestTextForProtocol" end it "can create a calendar entry" do expect(meeting.calentry).to be_nil meeting.create_calentry expect(meeting.calentry).not_to be_nil end it "can create an agenda" do meeting.calentry=calentry meeting.create_agenda a=meeting.agenda meeting.agenda.text="TestTextTestTextForProtocol" meeting.create_agenda expect(meeting.agenda).to be a expect(meeting.agenda.text).to match "TestTextTestTextForProtocol" end it "can be created with date and typ" do meeting2=Meeting.new_with_date_and_typ(nil, Date.today, meetingtyp) expect(meeting2.calentry).not_to be_nil expect(meeting2.meetingtyp).to be meetingtyp end it "gets empty text for nil protocol" do expect(meeting.protocol_text).to eq("") end it "gets empty text for nil agenda" do expect(meeting.agenda_text).to eq("") end it "can safly access protocol text" do meeting.create_protocol meeting.protocol.text="TestTextTest TextForProtocol" expect(meeting.protocol_text).to eq("TestTextTest TextForProtocol") end it "can safly access agenda text" do meeting.create_agenda meeting.agenda.text="TestTextTest TextForProtocol" expect(meeting.agenda_text).to eq("TestTextTest TextForProtocol") end it "is public by default" do expect(meeting).to be_public end it "is not public if intern" do meeting.intern=true expect(meeting).not_to be_public end it "has a divid" do meeting.calentry=calentry meeting.save expect(meeting.divid).to match "meeting" expect(meeting.divid).to match meeting.id.to_s end it "can find start and end of a meeting by 'Beginn' und 'Ende'" do meeting.calentry=calentry calentry.start=2.hours.ago meeting.create_protocol meeting.protocol.text="Beginn: " + 1.hours.ago.to_s meeting.update_time_from_protocol expect(calentry.start).to be_within(1.minute).of 1.hours.ago end it "has a text even without meetingtyp" do meeting.meetingtyp=nil meeting.parent=nil meeting.name="sdf" expect(meeting.text).to match("sdf") end it "has an empty text without meetingtyp, parent, calentry or name" do meeting.meetingtyp=nil meeting.parent=nil meeting.calentry=nil meeting.name="" expect(meeting.text).to eq("") end end