ReadyResponder/ReadyResponder

View on GitHub
spec/services/time_rounding_service_spec.rb

Summary

Maintainability
B
4 hrs
Test Coverage
require 'rails_helper'

RSpec.describe TimeRoundingService do

  describe "#closest_fifteen" do

  let(:event){ build_stubbed(:event) }

    context "given an event" do
      it "rounds times in the first quarter of an hour correctly" do
        event.start_time = event.start_time.change(:hour => 9, :min => 1,
                                                     :sec => 35, :usec => 231)
        event.end_time = event.end_time.change(:hour => 9, :min => 14,
                                                     :sec => 35, :usec => 231)

        @rounded_event = TimeRoundingService.new(event).closest_fifteen

        expect(@rounded_event.start_time.strftime("%H:%M:%S:%L")).to eq("09:15:00:000")
        expect(@rounded_event.end_time.strftime("%H:%M:%S:%L")).to eq("09:00:00:000")
      end

      it "rounds times in the second quarter of an hour correctly" do
        event.start_time = event.start_time.change(:hour => 9, :min => 16,
                                                     :sec => 35, :usec => 231)
        event.end_time = event.end_time.change(:hour => 9, :min => 19,
                                                     :sec => 35, :usec => 231)

        @rounded_event = TimeRoundingService.new(event).closest_fifteen

        expect(@rounded_event.start_time.strftime("%H:%M:%S:%L")).to eq("09:30:00:000")
        expect(@rounded_event.end_time.strftime("%H:%M:%S:%L")).to eq("09:15:00:000")
      end

      it "rounds times in the third quarter of an hour correctly" do
        event.start_time = event.start_time.change(:hour => 9, :min => 31,
                                                     :sec => 35, :usec => 231)
        event.end_time = event.end_time.change(:hour => 9, :min => 44,
                                                     :sec => 35, :usec => 231)

        @rounded_event = TimeRoundingService.new(event).closest_fifteen

        expect(@rounded_event.start_time.strftime("%H:%M:%S:%L")).to eq("09:45:00:000")
        expect(@rounded_event.end_time.strftime("%H:%M:%S:%L")).to eq("09:30:00:000")
      end

      it "rounds times in the fourth quarter of an hour correctly" do
        event.start_time = event.start_time.change(:hour => 9, :min => 46,
                                                     :sec => 35, :usec => 231)
        event.end_time = event.end_time.change(:hour => 9, :min => 59,
                                                     :sec => 35, :usec => 231)

        @rounded_event = TimeRoundingService.new(event).closest_fifteen

        expect(@rounded_event.start_time.strftime("%H:%M:%S:%L")).to eq("10:00:00:000")
        expect(@rounded_event.end_time.strftime("%H:%M:%S:%L")).to eq("09:45:00:000")
      end
    end

  end

end