forked from instructure/canvas-lms
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathremoteSelectSpec.coffee
More file actions
108 lines (88 loc) · 2.97 KB
/
Copy pathremoteSelectSpec.coffee
File metadata and controls
108 lines (88 loc) · 2.97 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
define [
'jquery'
'underscore'
'compiled/xhr/RemoteSelect'
], ($, _, RemoteSelect) ->
QUnit.module 'RemoteSelect',
setup: ->
@response = [200, { 'Content-Type': 'application/json' }, '[{ "label": "one", "value": 1 }, {"label": "two", "value": 2 }]']
@el = $('<select id="test-select"></select>').appendTo('#fixtures')
teardown: ->
@el.remove()
document.getElementById("fixtures").innerHTML = ""
test 'should load results into a select', ->
server = sinon.fakeServer.create()
server.respondWith(/.+/, @response)
rs = new RemoteSelect(@el, url: '/test/url.json')
ok @el.prop('disabled')
server.respond()
equal @el.children().length, 2
server.restore()
test 'should load an object as <optgroup>', ->
@response.pop()
@response.push JSON.stringify {
'Group One': [
{ label: 'One', value: 1 }
{ label: 'Two', value: 2 }
]
'Group Two': [
{ label: 'Three', value: 3 }
{ label: 'Four', value: 4 }
]
}
server = sinon.fakeServer.create()
server.respondWith(/.+/, @response)
rs = new RemoteSelect(@el, url: '/test/url.json')
server.respond()
equal @el.children('optgroup').length, 2
equal @el.find('option').length, 4
server.restore()
test 'should cache responses', ->
server = sinon.fakeServer.create()
server.respondWith(/.+/, @response)
@spy($, 'getJSON')
rs = new RemoteSelect(@el, url: '/test/cached.json')
server.respond()
ok $.getJSON.calledOnce
equal _.keys(rs.cache.store).length, 1
server.restore()
test 'should accept a formatter', ->
server = sinon.fakeServer.create()
@response.pop()
@response.push JSON.stringify [
{ group: 'one', name: 'one', id: 1 }
{ group: 'one', name: 'two', id: 2 }
{ group: 'two', name: 'three', id: 3 }
{ group: 'two', name: 'four', id: 4 }
]
server.respondWith(/.+/, @response)
format = (data) ->
groups = _.groupBy data, (obj) -> obj.group
_.each groups, (group, key) ->
groups[key] = _.map group, (item) ->
label: item.name, value: item.id
groups
rs = new RemoteSelect(@el,
formatter: format
url: '/test/url.json')
server.respond()
equal @el.children('optgroup').length, 2
equal @el.find('option').length, 4
server.restore()
test 'should take params', ->
server = sinon.fakeServer.create()
@spy($, 'getJSON')
rs = new RemoteSelect(@el,
url: '/test/url.json',
requestParams: { param: 'value' })
ok $.getJSON.calledWith '/test/url.json', { param: 'value' }, rs.onResponse
rs.spinner.remove()
server.restore()
test 'should include original options in select', ->
server = sinon.fakeServer.create()
server.respondWith(/.+/, @response)
@el.append '<option value="">Default</option>'
rs = new RemoteSelect(@el, url: '/test/url.json')
server.respond()
equal @el.children().length, 3
server.restore()