zendesk_apps_support 1.12.0 → 1.13.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d9d77a73de7a3e75fcae675994285e086f9c86cc
4
- data.tar.gz: a4451063938bc04fa59d98831b05b6939c6eb2ab
3
+ metadata.gz: 98a8a5e9ae9adf2d6f9ff72b7245bcda107eaa99
4
+ data.tar.gz: 917035d5d9622e79422d82faf385819a1ca90650
5
5
  SHA512:
6
- metadata.gz: f2dd54326aa0dab31f9c6b5325378e088a38ec8b655d1409eba64eb6864db08cdb2d867706afbe468bf36c25315f15d17273e54fd76a7e58f6db4c01b3960672
7
- data.tar.gz: 7ed3221747e4b490502da442caeae6c0e82f3d806c2f2ea51b3a49360ab7ea226bc0e926a8a4c09ad2c64dcb662f8ce6c55c9b99f86c7f393eca5e148a629a33
6
+ metadata.gz: 4c67cbc1a9d897390b1f74985008eec6f97370a8271b883021a03a67dc5e194bd676011fbfb8dae8ee363192d094b52cd2ad5182c58051a853e6c01667443eab
7
+ data.tar.gz: 24d926b6e780372cd93b94bf7b08e6d116ac73518763d2eb8d44706fa1d92fe458ab38429b4d311bc4c5d7df76dad9ad27782f3216516ed8b23b9dc1f55e9e2f
@@ -36,7 +36,7 @@ module ZendeskAppsSupport
36
36
 
37
37
  # If Ruby 1.9
38
38
  def respond_to_missing?(sym, include_private = false)
39
- @file.respond_to_missing?(sym, include_private) || super
39
+ @file.send(:respond_to_missing?, sym, include_private) || super
40
40
  end
41
41
 
42
42
  end
@@ -103,7 +103,7 @@ module ZendeskAppsSupport
103
103
  end
104
104
 
105
105
  def has_requirements?
106
- !requirements_json.nil?
106
+ File.exist?(File.join(root, "requirements.json"))
107
107
  end
108
108
 
109
109
  def is_requirements_only?
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zendesk_apps_support
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.12.0
4
+ version: 1.13.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - James A. Rosen
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2014-02-04 00:00:00.000000000 Z
14
+ date: 2014-02-05 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: i18n
@@ -156,30 +156,6 @@ files:
156
156
  - config/locales/translations/zendesk_apps_support.yml
157
157
  - README.md
158
158
  - LICENSE
159
- - spec/app/app.css
160
- - spec/app/app.js
161
- - spec/app/assets/logo-small.png
162
- - spec/app/assets/logo.png
163
- - spec/app/manifest.json
164
- - spec/app/templates/layout.hdbs
165
- - spec/app/translations/en.json
166
- - spec/app_file_spec.rb
167
- - spec/app_version_spec.rb
168
- - spec/build_translation_spec.rb
169
- - spec/i18n_spec.rb
170
- - spec/package_spec.rb
171
- - spec/spec_helper.rb
172
- - spec/validations/fixture/invalid_en.json
173
- - spec/validations/fixture/requirements.json
174
- - spec/validations/fixture/valid_en.json
175
- - spec/validations/jshint_error_spec.rb
176
- - spec/validations/manifest_spec.rb
177
- - spec/validations/requirements_spec.rb
178
- - spec/validations/source_spec.rb
179
- - spec/validations/stylesheets_spec.rb
180
- - spec/validations/templates_spec.rb
181
- - spec/validations/translations_spec.rb
182
- - spec/validations/validation_serialization_spec.rb
183
159
  homepage: http://github.com/zendesk/zendesk_apps_support
184
160
  licenses:
185
161
  - Apache License Version 2.0
@@ -204,28 +180,4 @@ rubygems_version: 2.0.14
204
180
  signing_key:
205
181
  specification_version: 4
206
182
  summary: Support to help you develop Zendesk Apps.
207
- test_files:
208
- - spec/app/app.css
209
- - spec/app/app.js
210
- - spec/app/assets/logo-small.png
211
- - spec/app/assets/logo.png
212
- - spec/app/manifest.json
213
- - spec/app/templates/layout.hdbs
214
- - spec/app/translations/en.json
215
- - spec/app_file_spec.rb
216
- - spec/app_version_spec.rb
217
- - spec/build_translation_spec.rb
218
- - spec/i18n_spec.rb
219
- - spec/package_spec.rb
220
- - spec/spec_helper.rb
221
- - spec/validations/fixture/invalid_en.json
222
- - spec/validations/fixture/requirements.json
223
- - spec/validations/fixture/valid_en.json
224
- - spec/validations/jshint_error_spec.rb
225
- - spec/validations/manifest_spec.rb
226
- - spec/validations/requirements_spec.rb
227
- - spec/validations/source_spec.rb
228
- - spec/validations/stylesheets_spec.rb
229
- - spec/validations/templates_spec.rb
230
- - spec/validations/translations_spec.rb
231
- - spec/validations/validation_serialization_spec.rb
183
+ test_files: []
data/spec/app/app.css DELETED
@@ -1,6 +0,0 @@
1
- h1 {
2
- color: red;
3
- span {
4
- color: green;
5
- }
6
- }
data/spec/app/app.js DELETED
@@ -1,12 +0,0 @@
1
- (function() {
2
-
3
- return {
4
- events: {
5
- 'app.activated':'doSomething'
6
- },
7
-
8
- doSomething: function() {
9
- }
10
- };
11
-
12
- }());
Binary file
Binary file
@@ -1,11 +0,0 @@
1
- {
2
- "name": "ABC",
3
- "author": {
4
- "name": "John Smith",
5
- "email": "john@example.com"
6
- },
7
- "defaultLocale": "en",
8
- "private": true,
9
- "location": "ticket_sidebar",
10
- "frameworkVersion": "0.5"
11
- }
@@ -1,11 +0,0 @@
1
- <header>
2
- <span class="logo"/>
3
- <h3>{{setting "name"}}</h3>
4
- </header>
5
- <section data-main/>
6
- <footer>
7
- <a href="mailto:{{author.email}}">
8
- {{author.name}}
9
- </a>
10
- </footer>
11
- </div>
@@ -1,5 +0,0 @@
1
- {
2
- "app": {
3
- "name": "Buddha Machine"
4
- }
5
- }
@@ -1,27 +0,0 @@
1
- require 'zendesk_apps_support'
2
-
3
- describe ZendeskAppsSupport::AppFile do
4
-
5
- before do
6
- package = mock('Package', :root => Pathname("spec/app/templates/"))
7
- @file = ZendeskAppsSupport::AppFile.new(package, 'layout.hdbs')
8
- end
9
-
10
- describe '=~' do
11
- it 'should test against the relative path of the file' do
12
- @file.should =~ /layout/
13
- end
14
- end
15
-
16
- describe 'read' do
17
- it 'should read file content' do
18
- @file.read.should =~ /<header>/
19
- end
20
- end
21
-
22
- describe 'to_s' do
23
- it 'should return file name' do
24
- @file.to_s.should == 'layout.hdbs'
25
- end
26
- end
27
- end
@@ -1,61 +0,0 @@
1
- require 'zendesk_apps_support'
2
-
3
- describe ZendeskAppsSupport::AppVersion do
4
-
5
- describe 'the current version' do
6
- subject do
7
- ZendeskAppsSupport::AppVersion.new(ZendeskAppsSupport::AppVersion::CURRENT)
8
- end
9
-
10
- it { should be_frozen }
11
- it { should be_present }
12
- it { should be_servable }
13
- it { should be_valid_for_update }
14
- it { should_not be_blank }
15
- it { should_not be_deprecated }
16
- it { should_not be_obsolete }
17
- it { should == ZendeskAppsSupport::AppVersion.new(ZendeskAppsSupport::AppVersion::CURRENT) }
18
- it { should_not == ZendeskAppsSupport::AppVersion.new('0.2') }
19
-
20
- its(:to_s) { should == ZendeskAppsSupport::AppVersion::CURRENT }
21
- its(:to_json) { should == ZendeskAppsSupport::AppVersion::CURRENT.to_json }
22
- end
23
-
24
- describe 'the deprecated version' do
25
- subject do
26
- ZendeskAppsSupport::AppVersion.new(ZendeskAppsSupport::AppVersion::DEPRECATED)
27
- end
28
-
29
- it { should be_frozen }
30
- it { should be_present }
31
- it { should be_servable }
32
- it { should_not be_valid_for_update }
33
- it { should_not be_blank }
34
- it { should be_deprecated }
35
- it { should_not be_obsolete }
36
- it { should == ZendeskAppsSupport::AppVersion.new(ZendeskAppsSupport::AppVersion::DEPRECATED) }
37
- it { should_not == ZendeskAppsSupport::AppVersion.new('0.2') }
38
-
39
- its(:to_s) { should == ZendeskAppsSupport::AppVersion::DEPRECATED }
40
- its(:to_json) { should == ZendeskAppsSupport::AppVersion::DEPRECATED.to_json }
41
- end
42
-
43
- describe 'a really old version' do
44
- subject do
45
- ZendeskAppsSupport::AppVersion.new('0.1')
46
- end
47
-
48
- it { should be_frozen }
49
- it { should be_present }
50
- it { should_not be_servable }
51
- it { should_not be_valid_for_update }
52
- it { should_not be_blank }
53
- it { should_not be_deprecated }
54
- it { should be_obsolete }
55
- it { should == ZendeskAppsSupport::AppVersion.new('0.1') }
56
- it { should_not == ZendeskAppsSupport::AppVersion.new('0.2') }
57
-
58
- its(:to_s) { should == '0.1' }
59
- its(:to_json) { should == '0.1'.to_json }
60
- end
61
- end
@@ -1,90 +0,0 @@
1
- require 'zendesk_apps_support'
2
- include ZendeskAppsSupport::BuildTranslation
3
-
4
- describe ZendeskAppsSupport::BuildTranslation do
5
-
6
- let(:en_json) {
7
- {
8
- "app" => {
9
- "abc" => {
10
- "title" => "description for abc field",
11
- "value" => "value of abc"
12
- }
13
- },
14
- "a" => {
15
- "a1" => {
16
- "title" => "description for a1 field",
17
- "value" => "value of a1"
18
- },
19
- "b" => {
20
- "b1" => {
21
- "title" => "description for b1 field",
22
- "value" => "value of b1"
23
- }
24
- }
25
- }
26
- }
27
- }
28
-
29
- describe '#to_flattened_namespaced_hash' do
30
-
31
- context "not zendesk i18n format" do
32
- it "should flatten hash without removing zendesk keys" do
33
- expected = {
34
- "app.abc.title" => "description for abc field",
35
- "app.abc.value" => "value of abc",
36
- "a.a1.title" => "description for a1 field",
37
- "a.a1.value" => "value of a1",
38
- "a.b.b1.title" => "description for b1 field",
39
- "a.b.b1.value" => "value of b1"
40
- }
41
-
42
- to_flattened_namespaced_hash(en_json).should == expected
43
- end
44
- end
45
-
46
- context 'zendesk i18n format' do
47
- context 'flatten value keys' do
48
- it "should flatten hash by removing zendesk title keys" do
49
- expected = {
50
- "app.abc" => "value of abc",
51
- "a.a1" => "value of a1",
52
- "a.b.b1" => "value of b1"
53
- }
54
-
55
- to_flattened_namespaced_hash(en_json, I18N_VALUE_KEY).should == expected
56
- end
57
- end
58
-
59
- context 'flatten title keys' do
60
- it "should flatten hash by removing zendesk value keys" do
61
- expected = {
62
- "app.abc" => "description for abc field",
63
- "a.a1" => "description for a1 field",
64
- "a.b.b1" => "description for b1 field"
65
- }
66
-
67
- to_flattened_namespaced_hash(en_json, I18N_TITLE_KEY).should == expected
68
- end
69
- end
70
- end
71
-
72
- end
73
-
74
- describe '#remove_zendesk_keys' do
75
- it "should remove zendesk translation keys" do
76
- expected = {
77
- "app" => {
78
- "abc" => "value of abc"
79
- },
80
- "a" => {
81
- "a1" => "value of a1",
82
- "b" => {
83
- "b1" => "value of b1"
84
- }
85
- }
86
- }
87
- remove_zendesk_keys(en_json).should == expected
88
- end
89
- end
90
- end
data/spec/i18n_spec.rb DELETED
@@ -1,22 +0,0 @@
1
- require 'zendesk_apps_support'
2
- require 'pathname'
3
-
4
- describe ZendeskAppsSupport::I18n do
5
-
6
- it 'should translate error messages' do
7
- key_prefix = ZendeskAppsSupport::Validations::ValidationError::KEY_PREFIX
8
- ZendeskAppsSupport::I18n.t("#{key_prefix}.missing_manifest").should == 'Could not find manifest.json'
9
- end
10
-
11
- end
12
-
13
- describe 'translations' do
14
-
15
- it 'should be up-to-date' do
16
- project_root = Pathname.new(File.expand_path('../../', __FILE__))
17
- zendesk_version = project_root.join('config/locales/translations/zendesk_apps_support.yml')
18
- standard_version = project_root.join('config/locales/en.yml')
19
- File.mtime(zendesk_version).to_i.should be <= File.mtime(standard_version).to_i
20
- end
21
-
22
- end
data/spec/package_spec.rb DELETED
@@ -1,84 +0,0 @@
1
- require 'zendesk_apps_support'
2
-
3
- describe ZendeskAppsSupport::Package do
4
-
5
- before do
6
- @package = ZendeskAppsSupport::Package.new('spec/app')
7
- end
8
-
9
- describe 'files' do
10
- it 'should return all the files within the app folder excluding files in tmp folder' do
11
- @package.files.map(&:relative_path).should =~ %w(app.css app.js assets/logo-small.png assets/logo.png manifest.json templates/layout.hdbs translations/en.json)
12
- end
13
- end
14
-
15
- describe 'template_files' do
16
- it 'should return all the files in the templates folder within the app folder' do
17
- @package.template_files.map(&:relative_path).should == %w(templates/layout.hdbs)
18
- end
19
- end
20
-
21
- describe 'translation_files' do
22
- it 'should return all the files in the translations folder within the app folder' do
23
- @package.translation_files.map(&:relative_path).should == %w(translations/en.json)
24
- end
25
- end
26
-
27
- describe 'manifest_json' do
28
- it 'should return manifest json' do
29
- manifest = @package.manifest_json
30
- manifest[:name].should == 'ABC'
31
- manifest[:author][:name].should == 'John Smith'
32
- manifest[:author][:email].should == 'john@example.com'
33
- manifest[:defaultLocale].should == 'en'
34
- manifest[:private].should == true
35
- manifest[:location].should == 'ticket_sidebar'
36
- manifest[:frameworkVersion].should == '0.5'
37
- end
38
- end
39
-
40
- describe 'readified_js' do
41
- it 'should generate js ready for installation' do
42
- js = @package.readified_js(nil, 0, 'http://localhost:4567/')
43
- expected =<<HERE
44
- (function() {
45
- with( require('apps/framework/app_scope') ) {
46
-
47
- var source = (function() {
48
-
49
- return {
50
- events: {
51
- 'app.activated':'doSomething'
52
- },
53
-
54
- doSomething: function() {
55
- }
56
- };
57
-
58
- }());
59
- ;
60
-
61
- ZendeskApps["ABC"] = ZendeskApps.defineApp(source)
62
- .reopenClass({ location: "ticket_sidebar" })
63
- .reopen({
64
- assetUrlPrefix: "http://localhost:4567/",
65
- appClassName: "app-0",
66
- author: {
67
- name: "John Smith",
68
- email: "john@example.com"
69
- },
70
- translations: {"app":{\"name\":\"Buddha Machine\"}},
71
- templates: {"layout":"<style>\\n.app-0 header .logo {\\n background-image: url(\\"http://localhost:4567/logo-small.png\\"); }\\n.app-0 h1 {\\n color: red; }\\n .app-0 h1 span {\\n color: green; }\\n</style>\\n<header>\\n <span class=\\"logo\\"/>\\n <h3>{{setting \\"name\\"}}</h3>\\n</header>\\n<section data-main/>\\n<footer>\\n <a href=\\"mailto:{{author.email}}\\">\\n {{author.name}}\\n </a>\\n</footer>\\n</div>"},
72
- frameworkVersion: "0.5"
73
- });
74
-
75
- }
76
-
77
- ZendeskApps["ABC"].install({"id": 0, "app_id": 0, "settings": {\"title\":\"ABC\"}});
78
-
79
- }());
80
- HERE
81
- js.should == expected
82
- end
83
- end
84
- end
data/spec/spec_helper.rb DELETED
@@ -1,3 +0,0 @@
1
- def read_fixture_file(file)
2
- File.read("#{File.dirname(__FILE__)}/validations/fixture/#{file}")
3
- end
@@ -1,20 +0,0 @@
1
- {
2
- "app": {
3
- "package" : "my_app",
4
- "abc" : {
5
- "title" : "description for abc field",
6
- "value" : "value of abc"
7
- }
8
- },
9
- "a": {
10
- "a1": {
11
- "title": "description for a1 field",
12
- "value": "value of a1"
13
- },
14
- "b": {
15
- "b1": {
16
- "value": "value of b1"
17
- }
18
- }
19
- }
20
- }
@@ -1,22 +0,0 @@
1
- {
2
- "targets": {
3
- "jira_story_target": {
4
- "title": "blah",
5
- "type": "jira_target",
6
- "active": true,
7
- "target_url": "http://example.org"
8
- }
9
- },
10
-
11
- "triggers": {
12
- "submit_trigger": {
13
- "title": "whatever",
14
- "position": "whatever",
15
- "active": true,
16
- "conditions": {
17
- "all": [{ "field": "status", "operator": "less_than", "value": "solved" }]
18
- },
19
- "actions" : []
20
- }
21
- }
22
- }
@@ -1,21 +0,0 @@
1
- {
2
- "app": {
3
- "package" : "my_app",
4
- "abc" : {
5
- "title" : "description for abc field",
6
- "value" : "value of abc"
7
- }
8
- },
9
- "a": {
10
- "a1": {
11
- "title": "description for a1 field",
12
- "value": "value of a1"
13
- },
14
- "b": {
15
- "b1": {
16
- "title": "description for b1 field",
17
- "value": "value of b1"
18
- }
19
- }
20
- }
21
- }
@@ -1,17 +0,0 @@
1
- require 'zendesk_apps_support'
2
-
3
- describe ZendeskAppsSupport::Validations::JSHintValidationError do
4
-
5
- let(:filename) { 'foo.js' }
6
-
7
- context 'with nil errors' do
8
-
9
- let(:errors) { [ nil, { 'line' => 12, 'reason' => 'eval is evil' }, nil ] }
10
- let(:error) { ZendeskAppsSupport::Validations::JSHintValidationError.new(filename, errors) }
11
-
12
- it 'ignores nil errors' do
13
- error.to_s.should =~ /eval is evil/
14
- end
15
- end
16
-
17
- end
@@ -1,219 +0,0 @@
1
- require 'zendesk_apps_support'
2
- require 'json'
3
-
4
- describe ZendeskAppsSupport::Validations::Manifest do
5
-
6
- def default_required_params(overrides = {})
7
- valid_fields = ZendeskAppsSupport::Validations::Manifest::REQUIRED_MANIFEST_FIELDS.inject({}) do |fields, name|
8
- fields[name] = name
9
- fields
10
- end
11
-
12
- valid_fields.merge(overrides)
13
- end
14
-
15
- def create_package(parameter_hash)
16
- params = default_required_params(parameter_hash)
17
- manifest = mock('AppFile', :relative_path => 'manifest.json', :read => JSON.dump(params))
18
- mock('Package', :files => [manifest], :has_location? => true)
19
- end
20
-
21
- it 'should have an error when manifest.json is missing' do
22
- files = [mock('AppFile', :relative_path => 'abc.json')]
23
- package = mock('Package', :files => files)
24
- errors = ZendeskAppsSupport::Validations::Manifest.call(package)
25
-
26
- errors.first().to_s.should eql 'Could not find manifest.json'
27
- end
28
-
29
- it 'should have an error when required field is missing' do
30
- manifest = mock('AppFile', :relative_path => 'manifest.json', :read => "{}")
31
- package = mock('Package', :files => [manifest], :has_location? => true)
32
- errors = ZendeskAppsSupport::Validations::Manifest.call(package)
33
-
34
- errors.first().to_s.should eql 'Missing required fields in manifest: author, defaultLocale, frameworkVersion'
35
- end
36
-
37
- it 'should have an error when the defaultLocale is invalid' do
38
- manifest = { 'defaultLocale' => 'pt-BR-1' }
39
- manifest_file = mock('AppFile', :relative_path => 'manifest.json', :read => JSON.dump(manifest))
40
- package = mock('Package', :files => [manifest_file], :has_location? => true)
41
- errors = ZendeskAppsSupport::Validations::Manifest.call(package)
42
-
43
- locale_error = errors.find { |e| e.to_s =~ /default locale/ }
44
- locale_error.should_not be_nil
45
- end
46
-
47
- it 'should have an error when the translation file is missing for the defaultLocale' do
48
- manifest = { 'defaultLocale' => 'pt' }
49
- manifest_file = mock('AppFile', :relative_path => 'manifest.json', :read => JSON.dump(manifest))
50
- translation_files = mock('AppFile', :relative_path => 'translations/en.json')
51
- package = mock('Package', :files => [manifest_file], :has_location? => true, :translation_files => [translation_files])
52
- errors = ZendeskAppsSupport::Validations::Manifest.call(package)
53
-
54
- locale_error = errors.find { |e| e.to_s =~ /Missing translation file/ }
55
- locale_error.should_not be_nil
56
- end
57
-
58
- it 'should have an error when the location is invalid' do
59
- manifest = { 'location' => ['ticket_sidebar', 'a_invalid_location'] }
60
- manifest_file = mock('AppFile', :relative_path => 'manifest.json', :read => JSON.dump(manifest))
61
- package = mock('Package', :files => [manifest_file], :has_location? => true)
62
- errors = ZendeskAppsSupport::Validations::Manifest.call(package)
63
-
64
- locations_error = errors.find { |e| e.to_s =~ /invalid location/ }
65
- locations_error.should_not be_nil
66
- end
67
-
68
- it 'should have an error when there are duplicate locations' do
69
- manifest = { 'location' => ['ticket_sidebar', 'ticket_sidebar'] }
70
- manifest_file = mock('AppFile', :relative_path => 'manifest.json', :read => JSON.dump(manifest))
71
- package = mock('Package', :files => [manifest_file], :has_location? => true)
72
- errors = ZendeskAppsSupport::Validations::Manifest.call(package)
73
-
74
- locations_error = errors.find { |e| e.to_s =~ /duplicate/ }
75
- locations_error.should_not be_nil
76
- end
77
-
78
- it 'should have an error when the version is not supported' do
79
- manifest = { 'frameworkVersion' => '0.7' }
80
- manifest_file = mock('AppFile', :relative_path => 'manifest.json', :read => JSON.dump(manifest))
81
- package = mock('Package', :files => [manifest_file], :has_location? => true)
82
- errors = ZendeskAppsSupport::Validations::Manifest.call(package)
83
-
84
- version_error = errors.find { |e| e.to_s =~ /not a valid framework version/ }
85
- version_error.should_not be_nil
86
- end
87
-
88
- it 'should have an error when a hidden parameter is set to required' do
89
- manifest = {
90
- 'parameters' => [
91
- 'name' => 'a parameter',
92
- 'type' => 'hidden',
93
- 'required' => true
94
- ]
95
- }
96
-
97
- manifest_file = mock('AppFile', :relative_path => 'manifest.json', :read => JSON.dump(manifest))
98
- package = mock('Package', :files => [manifest_file], :has_location? => true)
99
- errors = ZendeskAppsSupport::Validations::Manifest.call(package)
100
-
101
- hidden_params_error = errors.find { |e| e.to_s =~ /set to hidden and cannot be required/ }
102
- hidden_params_error.should_not be_nil
103
- end
104
-
105
- it 'should have an error when manifest is not a valid json' do
106
- manifest = mock('AppFile', :relative_path => 'manifest.json', :read => "}")
107
- package = mock('Package', :files => [manifest], :has_location? => true)
108
- errors = ZendeskAppsSupport::Validations::Manifest.call(package)
109
-
110
- errors.first().to_s.should =~ /^manifest is not proper JSON/
111
- end
112
-
113
- it "should have an error when required oauth fields are missing" do
114
- oauth_hash = {
115
- "oauth" => {}
116
- }
117
- errors = ZendeskAppsSupport::Validations::Manifest.call(create_package(default_required_params.merge(oauth_hash)))
118
- oauth_error = errors.find { |e| e.to_s =~ /oauth field/ }
119
- oauth_error.to_s.should == "Missing required oauth fields in manifest: client_id, client_secret, authorize_uri, access_token_uri"
120
- end
121
-
122
- context 'with invalid parameters' do
123
-
124
- before do
125
- ZendeskAppsSupport::Validations::Manifest.stub(:default_locale_error)
126
- ZendeskAppsSupport::Validations::Manifest.stub(:invalid_location_error)
127
- ZendeskAppsSupport::Validations::Manifest.stub(:invalid_version_error)
128
- end
129
-
130
- it 'has an error when the app parameters are not an array' do
131
- parameter_hash = {
132
- 'parameters' => {
133
- 'name' => 'a parameter',
134
- 'type' => 'text'
135
- }
136
- }
137
-
138
- errors = ZendeskAppsSupport::Validations::Manifest.call(create_package(parameter_hash))
139
- errors.map(&:to_s).should == ['App parameters must be an array.']
140
- end
141
-
142
- it 'has an error when there is a parameter called "name"' do
143
- parameter_hash = {
144
- 'parameters' => [{
145
- 'name' => 'name',
146
- 'type' => 'text'
147
- }]
148
- }
149
-
150
- errors = ZendeskAppsSupport::Validations::Manifest.call(create_package(parameter_hash))
151
- errors.map(&:to_s).should == ["Can't call a parameter 'name'"]
152
- end
153
-
154
- it "doesn't have an error with an array of app parameters" do
155
- parameter_hash = {
156
- 'parameters' => [{
157
- 'name' => 'a parameter',
158
- 'type' => 'text'
159
- }]
160
- }
161
-
162
- errors = ZendeskAppsSupport::Validations::Manifest.call(create_package(parameter_hash))
163
- errors.should be_empty
164
- end
165
-
166
- it 'behaves when the manifest does not have parameters' do
167
- errors = ZendeskAppsSupport::Validations::Manifest.call(create_package(default_required_params))
168
- errors.should be_empty
169
- end
170
-
171
- it 'shows error when duplicate parameters are defined' do
172
- parameter_hash = {
173
- 'parameters' => [
174
- {
175
- 'name' => 'url',
176
- 'type' => 'text'
177
- },
178
- {
179
- 'name' => 'url',
180
- 'type' => 'text'
181
- }
182
- ]
183
- }
184
-
185
- errors = ZendeskAppsSupport::Validations::Manifest.call(create_package(parameter_hash))
186
- errors.map(&:to_s).should == ['Duplicate app parameters defined: ["url"]']
187
- end
188
-
189
- it 'has an error when the parameter type is not valid' do
190
- parameter_hash = {
191
- 'parameters' =>
192
- [
193
- {
194
- 'name' => 'should be number',
195
- 'type' => 'integer'
196
- }
197
- ]
198
- }
199
- errors = ZendeskAppsSupport::Validations::Manifest.call(create_package(default_required_params.merge(parameter_hash)))
200
-
201
- expect(errors.count).to eq 1
202
- expect(errors.first.to_s).to eq "integer is an invalid parameter type."
203
- end
204
-
205
- it "doesn't have an error with a correct parameter type" do
206
- parameter_hash = {
207
- 'parameters' =>
208
- [
209
- {
210
- 'name' => 'valid type',
211
- 'type' => 'number'
212
- }
213
- ]
214
- }
215
- errors = ZendeskAppsSupport::Validations::Manifest.call(create_package(default_required_params.merge(parameter_hash)))
216
- expect(errors).to be_empty
217
- end
218
- end
219
- end
@@ -1,23 +0,0 @@
1
- require 'zendesk_apps_support'
2
- require 'spec_helper'
3
-
4
- describe ZendeskAppsSupport::Validations::Requirements do
5
-
6
- it 'creates an error when the file is not valid JSON' do
7
- requirements = mock('AppFile', :relative_path => 'requirements.json', :read => "{")
8
- package = mock('Package', :files => [requirements])
9
- errors = ZendeskAppsSupport::Validations::Requirements.call(package)
10
-
11
- errors.first.key.should == :requirements_not_json
12
- end
13
-
14
- it "creates no error when the file is valid JSON" do
15
- requirements = mock('AppFile', :relative_path => 'requirements.json',
16
- :read => read_fixture_file('requirements.json'))
17
- package = mock('Package', :files => [requirements])
18
- errors = ZendeskAppsSupport::Validations::Requirements.call(package)
19
-
20
- expect(errors).to be_empty
21
- end
22
-
23
- end
@@ -1,21 +0,0 @@
1
- require 'zendesk_apps_support'
2
-
3
- describe ZendeskAppsSupport::Validations::Source do
4
-
5
- it 'should have an error when app.js is missing' do
6
- files = [mock('AppFile', :relative_path => 'abc.js')]
7
- package = mock('Package', :files => files)
8
- errors = ZendeskAppsSupport::Validations::Source.call(package)
9
-
10
- errors.first().to_s.should eql 'Could not find app.js'
11
- end
12
-
13
- it 'should have a jslint error when missing semicolon' do
14
- source = mock('AppFile', :relative_path => 'app.js', :read => "var a = 1")
15
- package = mock('Package', :files => [source])
16
- errors = ZendeskAppsSupport::Validations::Source.call(package)
17
-
18
- errors.first().to_s.should eql "JSHint error in app.js: \n L1: Missing semicolon."
19
- end
20
-
21
- end
@@ -1,34 +0,0 @@
1
- require 'zendesk_apps_support'
2
-
3
- describe ZendeskAppsSupport::Validations::Stylesheets do
4
- it 'does not return errors if there is no custom css' do
5
-
6
- package = stub(:customer_css => "")
7
- ZendeskAppsSupport::Validations::Stylesheets.call(package).should be_empty
8
- end
9
-
10
- it 'does not return errors for valid css' do
11
- valid_css = <<-CSS
12
- .my-class {
13
- border: solid 1px black;
14
- }
15
- CSS
16
- package = stub(:customer_css => valid_css)
17
-
18
- errors = ZendeskAppsSupport::Validations::Stylesheets.call(package)
19
- errors.should be_empty
20
- end
21
-
22
- it 'returns style sheet validation error for invalid css' do
23
- invalid_css = <<-CSS
24
- .my-class {
25
- border: }
26
- }
27
- CSS
28
- package = stub(:customer_css => invalid_css)
29
-
30
- errors = ZendeskAppsSupport::Validations::Stylesheets.call(package)
31
- errors.count.should == 1
32
- errors.first.to_s.should match /Sass error: Invalid CSS after.*/
33
- end
34
- end
@@ -1,13 +0,0 @@
1
- require 'zendesk_apps_support'
2
-
3
- describe ZendeskAppsSupport::Validations::Templates do
4
-
5
- it 'should have a jslint error when missing semicolon' do
6
- template = mock('AppFile', :relative_path => 'layout.hdbs', :read => "<style>")
7
- package = mock('Package', :template_files => [template])
8
- errors = ZendeskAppsSupport::Validations::Templates.call(package)
9
-
10
- errors.first().to_s.should eql "<style> tag in layout.hdbs. Use an app.css file instead."
11
- end
12
-
13
- end
@@ -1,83 +0,0 @@
1
- require 'zendesk_apps_support'
2
- require 'spec_helper'
3
- require 'json'
4
-
5
-
6
- describe ZendeskAppsSupport::Validations::Translations do
7
-
8
- let(:package) { mock('Package', :files => translation_files) }
9
- subject { ZendeskAppsSupport::Validations::Translations.call(package) }
10
-
11
- context 'when there are no translation files' do
12
- let(:translation_files) { [] }
13
- it 'should be valid' do
14
- subject.should be_empty
15
- end
16
- end
17
-
18
- context 'when there is file with invalid JSON' do
19
- let(:translation_files) do
20
- [mock('AppFile', :relative_path => 'translations/en.json', :read => '}')]
21
- end
22
-
23
- it 'should report the error' do
24
- subject.length.should == 1
25
- subject[0].to_s.should =~ /JSON/
26
- end
27
- end
28
-
29
- context 'when there is file with JSON representing a non-Object' do
30
- let(:translation_files) do
31
- [mock('AppFile', :relative_path => 'translations/en.json', :read => '"foo bar"')]
32
- end
33
-
34
- it 'should report the error' do
35
- subject.length.should == 1
36
- subject[0].to_s.should =~ /JSON/
37
- end
38
- end
39
-
40
- context 'when there is a file with an invalid locale for a name' do
41
- let(:translation_files) do
42
- [mock('AppFile', :relative_path => 'translations/en-US-1.json', :read => '{}')]
43
- end
44
-
45
- it 'should report the error' do
46
- subject.length.should == 1
47
- subject[0].to_s.should =~ /locale/
48
- end
49
- end
50
-
51
- context 'when there is a file with a valid locale containing valid JSON' do
52
- let(:translation_files) do
53
- [mock('AppFile', :relative_path => 'translations/en-US.json', :read => '{}')]
54
- end
55
-
56
- it 'should be valid' do
57
- subject.length.should == 0
58
- end
59
- end
60
-
61
- context 'validate translation format when "package" is defined inside "app"' do
62
- context 'all the leaf nodes have defined "title" and "value"' do
63
- let(:translation_files) do
64
- [mock('AppFile', :relative_path => 'translations/en-US.json', :read => read_fixture_file("valid_en.json"))]
65
- end
66
-
67
- it 'should be valid' do
68
- subject.length.should == 0
69
- end
70
- end
71
-
72
- context 'when the "title" field is not defined on one leaf node' do
73
- let(:translation_files) do
74
- [mock('AppFile', :relative_path => 'translations/en-US.json', :read => read_fixture_file("invalid_en.json"))]
75
- end
76
-
77
- it 'should be invalid' do
78
- subject.length.should == 1
79
- subject[0].to_s.should =~ /is invalid for translation/
80
- end
81
- end
82
- end
83
- end
@@ -1,96 +0,0 @@
1
- require 'zendesk_apps_support'
2
- require 'json'
3
-
4
- describe ZendeskAppsSupport::Validations::ValidationError do
5
-
6
- ValidationError = ZendeskAppsSupport::Validations::ValidationError
7
-
8
- it 'symbolizes the keys in its data' do
9
- error = ValidationError.new(:foo, 'bar' => 'baz')
10
- error.data[:bar].should == 'baz'
11
- end
12
-
13
- describe '#to_json' do
14
- let(:key) { 'foo.bar' }
15
- let(:data) { { 'baz' => 'quux' } }
16
- let(:error) { ValidationError.new(key, data) }
17
- subject { error.to_json }
18
-
19
- it do
20
- should == {
21
- 'class' => error.class.to_s,
22
- 'key' => error.key,
23
- 'data' => error.data
24
- }.to_json
25
- end
26
- end
27
-
28
- describe '.from_hash' do
29
-
30
- subject { ValidationError.from_hash(hash) }
31
-
32
- context 'for a generic error' do
33
- let(:hash) do
34
- {
35
- 'class' => 'ZendeskAppsSupport::Validations::ValidationError',
36
- 'key' => 'foo.bar.baz',
37
- 'data' => { 'quux' => 'yargle' }
38
- }
39
- end
40
-
41
- it { should be_a(ValidationError) }
42
-
43
- its(:key) { should == 'foo.bar.baz' }
44
-
45
- its(:data) { should == { :quux => 'yargle' } }
46
- its(:data) { should}
47
- end
48
-
49
- context 'for a JSHint error' do
50
- let(:hash) do
51
- {
52
- 'class' => 'ZendeskAppsSupport::Validations::JSHintValidationError',
53
- 'file' => 'foo.js',
54
- 'jshint_errors' => [ { 'line' => 55, 'reason' => 'Yuck' } ]
55
- }
56
- end
57
-
58
- it { should be_a(ZendeskAppsSupport::Validations::JSHintValidationError) }
59
-
60
- its(:key) { should == :jshint }
61
-
62
- its(:jshint_errors) do
63
- should == [ { 'line' => 55, 'reason' => 'Yuck' } ]
64
- end
65
- end
66
-
67
- context 'for a non-ValidationError hash' do
68
- let(:hash) do
69
- {
70
- :foo => 'bar'
71
- }
72
- end
73
-
74
- it 'raises a DeserializationError' do
75
- lambda { subject }.should raise_error(ValidationError::DeserializationError)
76
- end
77
- end
78
-
79
- end
80
-
81
- describe '.from_json' do
82
-
83
- it 'decodes a JSON hash and passes it to .from_hash' do
84
- ValidationError.should_receive(:from_hash).with('foo' => 'bar')
85
- ValidationError.from_json(MultiJson.encode({ 'foo' => 'bar' }))
86
- end
87
-
88
- it 'raises a DeserializationError when passed non-JSON' do
89
- lambda {
90
- ValidationError.from_json('}}}')
91
- }.should raise_error(ValidationError::DeserializationError)
92
- end
93
-
94
- end
95
-
96
- end