master
  1require "spec_helper"
  2
  3describe Quantity do
  4  describe "#to" do
  5    it "converts lbs to kgs" do
  6      lbs = Quantity.new(135.0, :lbs)
  7      expect(lbs.to(:kg).to_f.round(1)).to eql(61.2)
  8    end
  9
 10    it "converts kgs to kgs" do
 11      kgs = Quantity.new(135.0, :kgs)
 12      expect(kgs.to(:kgs).to_f).to eql(135.0)
 13    end
 14
 15    it "converts kgs to lbs" do
 16      kgs = Quantity.new(61.2, :kgs)
 17      expect(kgs.to(:lbs).to_f.round(0)).to eql(135)
 18    end
 19
 20    it "converts lbs to lbs" do
 21      lbs = Quantity.new(135.0, :lbs)
 22      expect(lbs.to(:lbs).to_f).to eql(135.0)
 23    end
 24  end
 25
 26  describe "#eql?" do
 27    it "is equal when both are lbs" do
 28      quantity = Quantity.new(135.0, :lbs)
 29      other = Quantity.new(135.0, :lbs)
 30      expect(quantity).to eql(other)
 31    end
 32
 33    it "is equal when both are kgs" do
 34      quantity = Quantity.new(61.2, :kgs)
 35      other = Quantity.new(61.2, :kgs)
 36      expect(quantity).to eql(other)
 37    end
 38
 39    it "is equal when different units" do
 40      quantity = Quantity.new(135.0, :lbs)
 41      other = Quantity.new(61.2, :kgs)
 42      expect(quantity).to eql(other)
 43    end
 44
 45    it "is equal to a float" do
 46      quantity = Quantity.new(135.0, :lbs)
 47      expect(quantity).to eql(135.0)
 48    end
 49
 50    it "is not equal" do
 51      quantity = Quantity.new(135.0, :lbs)
 52      other = Quantity.new(135.2, :lbs)
 53      expect(quantity).to_not eql(other)
 54    end
 55  end
 56
 57  describe "#+" do
 58    it "adds lbs to lbs" do
 59      quantity = Quantity.new(135.0, :lbs)
 60      other = Quantity.new(135.0, :lbs)
 61      expect(quantity + other).to eql(Quantity.new(270.0, :lbs))
 62    end
 63
 64    it "adds kgs to lbs" do
 65      quantity = Quantity.new(135.0, :lbs)
 66      other = Quantity.new(61.2, :kg)
 67      expect(quantity + other).to eql(Quantity.new(270.0, :lbs))
 68    end
 69
 70    it "adds lbs to kgs" do
 71      quantity = Quantity.new(61.2, :kg)
 72      other = Quantity.new(135.0, :lbs)
 73      expect(quantity + other).to eql(Quantity.new(122.4, :kg))
 74    end
 75
 76    it "adds a float to lbs" do
 77      quantity = Quantity.new(135.0, :lbs)
 78      other = 135.0
 79      expect(quantity + other).to eql(Quantity.new(270.0, :lbs))
 80    end
 81  end
 82
 83  describe "#-" do
 84    it "subtracts lbs from lbs" do
 85      quantity = Quantity.new(135.0, :lbs)
 86      other = Quantity.new(135.0, :lbs)
 87      expect(quantity - other).to eql(Quantity.new(0.0, :lbs))
 88    end
 89
 90    it "subtracts kgs from lbs" do
 91      quantity = Quantity.new(135.0, :lbs)
 92      other = Quantity.new(61.2, :kg)
 93      expect(quantity - other).to eql(Quantity.new(0.0, :lbs))
 94    end
 95
 96    it "subtracts lbs from kgs" do
 97      quantity = Quantity.new(61.2, :kg)
 98      other = Quantity.new(135.0, :lbs)
 99      expect(quantity - other).to eql(Quantity.new(0.0, :kg))
100    end
101
102    it "subtracts a float from lbs" do
103      quantity = Quantity.new(135.0, :lbs)
104      other = 135.0
105      expect(quantity - other).to eql(Quantity.new(0.0, :lbs))
106    end
107  end
108
109  describe "#/" do
110    it "divides lbs from lbs" do
111      quantity = Quantity.new(135.0, :lbs)
112      other = Quantity.new(135.0, :lbs)
113      expect(quantity / other).to eql(Quantity.new(1.0, :lbs))
114    end
115
116    it "divides kgs from lbs" do
117      quantity = Quantity.new(135.0, :lbs)
118      other = Quantity.new(61.2, :kg)
119      expect(quantity / other).to eql(Quantity.new(1.0, :lbs))
120    end
121
122    it "divides lbs from kgs" do
123      quantity = Quantity.new(61.2, :kg)
124      other = Quantity.new(135.0, :lbs)
125      expect(quantity / other).to eql(Quantity.new(1.0, :kg))
126    end
127
128    it "divides a float from lbs" do
129      quantity = Quantity.new(135.0, :lbs)
130      other = 135.0
131      expect(quantity / other).to eql(Quantity.new(1.0, :lbs))
132    end
133  end
134
135  describe "#*" do
136    it "multiples lbs with lbs" do
137      quantity = Quantity.new(135.0, :lbs)
138      other = Quantity.new(135.0, :lbs)
139      expect(quantity * other).to eql(Quantity.new(18_225.0, :lbs))
140    end
141
142    it "multiples a float with lbs" do
143      quantity = Quantity.new(135.0, :lbs)
144      other = 135.0
145      expect(quantity * other).to eql(Quantity.new(18_225.0, :lbs))
146    end
147  end
148
149  describe "#>" do
150    it "compares lbs with lbs" do
151      quantity = Quantity.new(135.1, :lbs)
152      other = Quantity.new(135.0, :lbs)
153      expect(quantity).to be > other
154      expect(other).to_not be > quantity
155    end
156  end
157
158  describe "#>=" do
159    it "compares lbs with lbs" do
160      quantity = Quantity.new(135.2, :lbs)
161      other = Quantity.new(135.0, :lbs)
162      expect(quantity).to be >= quantity
163      expect(quantity).to be >= other
164      expect(other).to_not be >= quantity
165    end
166  end
167
168  describe "#<" do
169    it "compares lbs with lbs" do
170      quantity = Quantity.new(135.1, :lbs)
171      other = Quantity.new(135.0, :lbs)
172      expect(quantity).to_not be < other
173      expect(other).to be < quantity
174    end
175  end
176
177  describe "#to_json" do
178    it 'format the amount and unit to json' do
179      expect(100.lbs.to_json).to eql({
180        amount: 100.0,
181        unit: 'lbs',
182      }.to_json)
183    end
184  end
185end