# encoding: UTF-8 require 'spec_helper' require 'earth/locality/country' describe Country do describe '.united_states' do it 'should return the United States' do us = Country.find_or_create_by_iso_3166_code 'US' Country.united_states.should == us end end describe 'Sanity check', :sanity => true do let(:us) { Country.united_states } let(:uk) { Country.find 'GB' } it { Country.count.should == 250 } describe 'uses UTF-8 encoding' do it { Country.find('AX').name.should == "Åland Islands" } it { Country.find('CI').name.should == "Côte d'Ivoire" } end it { Country.where('heating_degree_days >= 0 AND cooling_degree_days > 0').count.should == 173 } describe 'US automobile data' do it { us.automobile_urbanity.should == 0.43 } it { us.automobile_city_speed.should be_within(5e-5).of(32.0259) } it { us.automobile_highway_speed.should be_within(5e-5).of(91.8935) } it { us.automobile_trip_distance.should be_within(5e-5).of(16.3348) } end describe 'electricity data' do it { Country.where('electricity_emission_factor >= 0').count.should == 136 } it { Country.where(:electricity_emission_factor_units => 'kilograms_co2e_per_kilowatt_hour').count.should == 136 } it { Country.where('electricity_co2_emission_factor >= 0').count.should == 136 } it { Country.where(:electricity_co2_emission_factor_units => 'kilograms_per_kilowatt_hour').count.should == 136 } it { Country.where('electricity_ch4_emission_factor >= 0').count.should == 136 } it { Country.where(:electricity_ch4_emission_factor_units => 'kilograms_co2e_per_kilowatt_hour').count.should == 136 } it { Country.where('electricity_n2o_emission_factor >= 0').count.should == 136 } it { Country.where(:electricity_n2o_emission_factor_units => 'kilograms_co2e_per_kilowatt_hour').count.should == 136 } it { Country.where('electricity_loss_factor >= 0').count.should == 136 } it { Country.maximum(:electricity_loss_factor).should < 0.3 } # spot checks it { us.electricity_emission_factor.should be_within(6e-6).of(0.55437) } it { us.electricity_co2_emission_factor.should be_within(5e-6).of(0.55165) } it { us.electricity_ch4_emission_factor.should be_within(5e-9).of(0.00027255) } it { us.electricity_n2o_emission_factor.should be_within(5e-8).of(0.0024437) } it { us.electricity_loss_factor.should be_within(5e-6).of(0.06503) } it { uk.electricity_emission_factor.should be_within(5e-6).of(0.51020) } it { uk.electricity_co2_emission_factor.should be_within(5e-6).of(0.5085) } it { uk.electricity_ch4_emission_factor.should be_within(5e-9).of(0.00016875) } it { uk.electricity_n2o_emission_factor.should be_within(5e-8).of(0.00152576) } it { uk.electricity_loss_factor.should be_within(5e-4).of(0.073) } end describe 'flight data' do it { Country.where("flight_route_inefficiency_factor > 0").count.should == 17 } it { us.flight_route_inefficiency_factor.should == 1.07 } it { uk.flight_route_inefficiency_factor.should == 1.1 } end describe 'lodging data' do it { us.lodging_occupancy_rate.should be_within(5e-4).of(0.601) } it { us.lodging_natural_gas_intensity.should be_within(5e-4).of(50.719) } it { us.lodging_natural_gas_intensity_units.should == 'megajoules_per_room_night' } end describe 'rail data' do it { Country.where("rail_passengers > 0").count.should == 26 } it { Country.where("rail_trip_distance > 0").count.should == 26 } it { Country.where("rail_trip_electricity_intensity > 0").count.should == 26 } it { Country.where("rail_trip_diesel_intensity > 0").count.should == 26 } it { Country.where("rail_trip_co2_emission_factor > 0").count.should == 26 } # spot checks it { us.rail_passengers.should be_within(10_000).of(4_466_991_391) } it { us.rail_trip_distance.should be_within(5e-5).of(12.9952) } it { us.rail_speed.should be_within(5e-5).of(32.4972) } it { us.rail_trip_electricity_intensity.should be_within(5e-5).of(0.14051) } it { us.rail_trip_diesel_intensity.should be_within(5e-5).of(0.01942) } it { us.rail_trip_co2_emission_factor.should be_within(5e-5).of(0.0909) } it { uk.rail_passengers.should == 1352150000 } it { uk.rail_trip_distance.should be_within(5e-5).of(40.6904) } it { uk.rail_trip_electricity_intensity.should be_within(5e-5).of(0.09) } it { uk.rail_trip_diesel_intensity.should be_within(5e-5).of(0.0028) } it { uk.rail_trip_co2_emission_factor.should be_within(5e-5).of(0.0458) } end describe '.fallback' do let(:fallback) { Country.fallback } it { fallback.name.should == 'fallback' } it { fallback.electricity_emission_factor.should be_within(5e-6).of(0.62609) } it { fallback.electricity_emission_factor_units.should == 'kilograms_co2e_per_kilowatt_hour' } it { fallback.electricity_co2_emission_factor.should be_within(5e-6).of(0.62354) } it { fallback.electricity_co2_emission_factor_units.should == 'kilograms_per_kilowatt_hour' } it { fallback.electricity_ch4_emission_factor.should be_within(5e-6).of(0.00021) } it { fallback.electricity_ch4_emission_factor_units.should == 'kilograms_co2e_per_kilowatt_hour' } it { fallback.electricity_n2o_emission_factor.should be_within(5e-6).of(0.00234) } it { fallback.electricity_n2o_emission_factor_units.should == 'kilograms_co2e_per_kilowatt_hour' } it { fallback.electricity_loss_factor.should be_within(5e-4).of(0.096) } it { fallback.electricity_mix.should == ElectricityMix.fallback } end end end