spec/javascripts/temporal_spec.js.coffee in temporal-rails-0.2.1 vs spec/javascripts/temporal_spec.js.coffee in temporal-rails-0.2.2
- old
+ new
@@ -1,4 +1,76 @@
require '/assets/temporal.js'
describe "Temporal", ->
+ beforeEach ->
+ document.cookie = 'timezone='
+ document.cookie = 'timezone_offset='
+ @timezoneStub = {name: 'foo', offset: 0} # 0 here ensure the jsonp request isn't made
+
+ describe "signature", ->
+
+ it "has a detect and reference method", ->
+ expect(Object.keys(Temporal).length).toBe 2
+ expect(Object.keys(Temporal)).toEqual ['detect', 'reference']
+ expect(typeof(Temporal.detect)).toBe 'function'
+ expect(typeof(Temporal.reference)).toBe 'function'
+
+
+ describe ".detect", ->
+
+ beforeEach ->
+ window.Temporal = Temporal.reference() if Temporal.reference
+ @spy = spyOn(Temporal.prototype, 'detectLocally').andReturn @timezoneStub
+ @callback = ->
+
+ it "instantiates an instance and passes arguments", ->
+ instance = Temporal.detect('username', @callback)
+ expect(@spy).toHaveBeenCalled()
+ expect(instance.username).toBe 'username'
+ expect(instance.callback).toBe @callback
+
+
+ describe "constructor", ->
+
+ it "calls #detectLocally", ->
+ spy = spyOn(Temporal.prototype, 'detectLocally').andReturn @timezoneStub
+ new Temporal()
+ expect(spy.callCount).toBe 1
+
+ it "calls #geoLocate if there's a username for the GeoName API", ->
+ spyOn(Temporal.prototype, 'detectLocally').andReturn name: 'foo', offset: 1
+ spy = spyOn(Temporal.prototype, 'geoLocate')
+ new Temporal('username')
+ expect(spy.callCount).toBe 1
+
+ it "doesn't call #geoLocate if there isn't a username", ->
+ spyOn(Temporal.prototype, 'detectLocally').andReturn name: 'foo', offset: 1
+ spy = spyOn(Temporal.prototype, 'geoLocate')
+ new Temporal()
+ expect(spy.callCount).toBe 0
+
+ it "calls #set", ->
+ spyOn(Temporal.prototype, 'detectLocally').andReturn @timezoneStub
+ spy = spyOn(Temporal.prototype, 'set')
+ new Temporal()
+ expect(spy.callCount).toBe 1
+ expect(spy).toHaveBeenCalledWith name: 'foo', offset: 0
+
+
+ describe "#detectLocally", ->
+
+ beforeEach ->
+ spyOn(Temporal.prototype, 'detect')
+ @temporal = new Temporal()
+
+ it "returns a quickly determined time zone", ->
+ spyOn(Temporal.prototype, 'januaryOffset').andReturn -420
+ spyOn(Temporal.prototype, 'juneOffset').andReturn -360
+ timezone = @temporal.detectLocally()
+ expect(timezone).toEqual name: 'America/Denver', offset: -7
+
+ it "handles other locations than denver", ->
+ spyOn(Temporal.prototype, 'januaryOffset').andReturn 120
+ spyOn(Temporal.prototype, 'juneOffset').andReturn 120
+ timezone = @temporal.detectLocally()
+ expect(timezone).toEqual name: 'Africa/Johannesburg', offset: 2