parsley/spec/lib/unit_conversion/parsed_unit_spec.rb

99 lines
2.9 KiB
Ruby

require 'rails_helper'
RSpec.describe UnitConversion::ParsedUnit do
it 'converts simple units' do
data = {
'c' => '[cup_us]',
'cups' => '[cup_us]',
'pints' => '[pt_us]',
'gram' => 'g',
'grams' => 'g',
'Grams' => 'g',
'Tbsp' => '[tbs_us]',
'[tbs_us]' => '[tbs_us]',
'[oz_av]' => '[oz_av]'
}
data.each do |input, output|
expect(UnitConversion::ParsedUnit.new(input).unit).to eq output
end
end
it 'converts mixed units' do
data = {
'oz/c' => '[oz_av]/[cup_us]',
'kilograms/cups' => 'kg/[cup_us]',
'pints/junk' => '[pt_us]/junk',
'gram/[tbs_us]' => 'g/[tbs_us]'
}
data.each do |input, output|
expect(UnitConversion::ParsedUnit.new(input).unit).to eq output
end
end
describe '.to_s' do
it 'renders friendly simple units' do
expect(UnitConversion::ParsedUnit.new('m').to_s).to eq 'meter'
expect(UnitConversion::ParsedUnit.new('tbsp').to_s).to eq 'tablespoon'
expect(UnitConversion::ParsedUnit.new('gallons').to_s).to eq 'gallon'
expect(UnitConversion::ParsedUnit.new('[cup_us]').to_s).to eq 'cup'
expect(UnitConversion::ParsedUnit.new('junk').to_s).to eq 'junk'
end
it 'renders friendly compound units' do
expect(UnitConversion::ParsedUnit.new('m/c').to_s).to eq 'meter/cup'
expect(UnitConversion::ParsedUnit.new('[oz_av]/[cup_us]').to_s).to eq 'ounce/cup'
end
end
describe '.metric?' do
it 'returns true for metric units' do
expect(UnitConversion::ParsedUnit.new('m').metric?).to be_truthy
expect(UnitConversion::ParsedUnit.new('g').metric?).to be_truthy
expect(UnitConversion::ParsedUnit.new('meter').metric?).to be_truthy
expect(UnitConversion::ParsedUnit.new('centiliter').metric?).to be_truthy
end
it 'returns false for standard units' do
expect(UnitConversion::ParsedUnit.new('c').metric?).to be_falsey
expect(UnitConversion::ParsedUnit.new('tbsp').metric?).to be_falsey
expect(UnitConversion::ParsedUnit.new('oz').metric?).to be_falsey
end
it 'returns false for unknown units' do
expect(UnitConversion::ParsedUnit.new('cats').metric?).to be_falsey
expect(UnitConversion::ParsedUnit.new('dogs').metric?).to be_falsey
end
end
describe '.density?' do
it 'returns true for any mass over volume unit' do
data = [
'gram/cup',
'pound/gallon',
'ounce/tablespoon',
'ounce/centimeter3'
]
data.each do |input|
expect(UnitConversion::ParsedUnit.new(input).density?).to be_truthy
end
end
it 'returns false for any non density unit' do
data = [
'cup',
'gram',
'gram/hour',
'centimeter3/ounce'
]
data.each do |input|
expect(UnitConversion::ParsedUnit.new(input).density?).to be_falsey
end
end
end
end