transifex-interface-ruby 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (118) hide show
  1. checksums.yaml +6 -14
  2. data/.gitignore +17 -17
  3. data/.rspec +2 -0
  4. data/Gemfile +4 -4
  5. data/LICENSE.txt +22 -22
  6. data/README.md +517 -513
  7. data/Rakefile +1 -1
  8. data/lib/transifex.rb +84 -87
  9. data/lib/transifex/crud_requests.rb +43 -33
  10. data/lib/transifex/errors.rb +4 -4
  11. data/lib/transifex/project_components/language.rb +1 -1
  12. data/lib/transifex/project_components/language_components/coordinators.rb +4 -6
  13. data/lib/transifex/project_components/language_components/reviewers.rb +5 -8
  14. data/lib/transifex/project_components/language_components/translators.rb +6 -9
  15. data/lib/transifex/project_components/languages.rb +1 -1
  16. data/lib/transifex/resource.rb +1 -1
  17. data/lib/transifex/resource_components/content.rb +1 -1
  18. data/lib/transifex/resource_components/source.rb +1 -1
  19. data/lib/transifex/resource_components/stats.rb +1 -1
  20. data/lib/transifex/resource_components/translation.rb +1 -1
  21. data/lib/transifex/resource_components/translation_components/string.rb +1 -1
  22. data/lib/transifex/resource_components/translation_components/strings.rb +1 -1
  23. data/lib/transifex/resources.rb +1 -1
  24. data/lib/transifex/version.rb +3 -3
  25. data/spec/cassettes/fetch_formats.yml +121 -0
  26. data/spec/cassettes/language/fetch_language_info.yml +58 -0
  27. data/spec/cassettes/language/fetch_languages_info.yml +58 -0
  28. data/spec/cassettes/project/components/create_language.yml +95 -0
  29. data/spec/cassettes/project/components/create_language_non_existing_coordinator.yml +48 -0
  30. data/spec/cassettes/project/components/create_language_without_coordinator.yml +48 -0
  31. data/spec/cassettes/project/components/fetch_languages.yml +53 -0
  32. data/spec/cassettes/project/delete_project.yml +108 -0
  33. data/spec/cassettes/project/fetch_private_project_info.yml +59 -0
  34. data/spec/cassettes/project/fetch_with_details_private_project_info.yml +66 -0
  35. data/spec/cassettes/project/language/delete_language.yml +140 -0
  36. data/spec/cassettes/project/language/fetch_coordinators.yml +56 -0
  37. data/spec/cassettes/project/language/fetch_language_info.yml +52 -0
  38. data/spec/cassettes/project/language/fetch_reviewers.yml +56 -0
  39. data/spec/cassettes/project/language/fetch_translators.yml +54 -0
  40. data/spec/cassettes/project/language/fetch_with_details_language_info.yml +54 -0
  41. data/spec/cassettes/project/language/update_coordinators.yml +104 -0
  42. data/spec/cassettes/project/language/update_language.yml +100 -0
  43. data/spec/cassettes/project/language/update_non_existing_coordinator.yml +48 -0
  44. data/spec/cassettes/project/language/update_non_existing_language.yml +49 -0
  45. data/spec/cassettes/project/language/update_non_existing_reviewer.yml +101 -0
  46. data/spec/cassettes/project/language/update_non_existing_translator.yml +101 -0
  47. data/spec/cassettes/project/language/update_reviewers.yml +157 -0
  48. data/spec/cassettes/project/language/update_translators.yml +157 -0
  49. data/spec/cassettes/project/update_non_existing_attribute_private_project.yml +54 -0
  50. data/spec/cassettes/project/update_private_project.yml +120 -0
  51. data/spec/cassettes/project/update_with_missing_params_private_project.yml +54 -0
  52. data/spec/cassettes/projects/create_private_project.yml +111 -0
  53. data/spec/cassettes/projects/create_public_project.yml +111 -0
  54. data/spec/cassettes/projects/create_used_slug_project.yml +55 -0
  55. data/spec/cassettes/projects/fetch_projects.yml +61 -0
  56. data/spec/cassettes/resource/delete_not_existing_resource.yml +55 -0
  57. data/spec/cassettes/resource/delete_resource.yml +160 -0
  58. data/spec/cassettes/resource/fetch_all_languages_stats.yml +66 -0
  59. data/spec/cassettes/resource/fetch_content_as_file.yml +56 -0
  60. data/spec/cassettes/resource/fetch_content_as_hash.yml +58 -0
  61. data/spec/cassettes/resource/fetch_language_stats.yml +61 -0
  62. data/spec/cassettes/resource/fetch_not_existing_resource.yml +55 -0
  63. data/spec/cassettes/resource/fetch_resource_info.yml +59 -0
  64. data/spec/cassettes/resource/fetch_source_string_metadata.yml +52 -0
  65. data/spec/cassettes/resource/fetch_translations.yml +57 -0
  66. data/spec/cassettes/resource/fetch_updated_resource_info.yml +60 -0
  67. data/spec/cassettes/resource/fetch_updated_source_string_metadata.yml +52 -0
  68. data/spec/cassettes/resource/fetch_with_details_resource_info.yml +65 -0
  69. data/spec/cassettes/resource/fetch_with_file_and_mode_translations.yml +56 -0
  70. data/spec/cassettes/resource/fetch_with_file_translations.yml +56 -0
  71. data/spec/cassettes/resource/update_content_json.yml +115 -0
  72. data/spec/cassettes/resource/update_content_with_wrong_mimetype.yml +59 -0
  73. data/spec/cassettes/resource/update_content_yml.yml +114 -0
  74. data/spec/cassettes/resource/update_not_existing_resource.yml +55 -0
  75. data/spec/cassettes/resource/update_resource_info.yml +114 -0
  76. data/spec/cassettes/resource/update_source_language.yml +54 -0
  77. data/spec/cassettes/resource/update_source_string_metadata.yml +100 -0
  78. data/spec/cassettes/resource/update_translation_for_language.yml +62 -0
  79. data/spec/cassettes/resources/create_from_file.yml +55 -0
  80. data/spec/cassettes/resources/create_from_string.yml +54 -0
  81. data/spec/cassettes/resources/fetch_as_array.yml +62 -0
  82. data/spec/cassettes/resources/non_existing_project.yml +55 -0
  83. data/spec/cassettes/translation/fetch_string.yml +55 -0
  84. data/spec/cassettes/translation/fetch_strings.yml +54 -0
  85. data/spec/cassettes/translation/fetch_with_details_and_context_strings.yml +51 -0
  86. data/spec/cassettes/translation/fetch_with_details_and_key_strings.yml +56 -0
  87. data/spec/cassettes/translation/fetch_with_details_strings.yml +56 -0
  88. data/spec/cassettes/translation/update_multiple_translation_strings.yml +107 -0
  89. data/spec/cassettes/translation/update_single_translation_strings.yml +104 -0
  90. data/spec/cassettes/translation/update_string.yml +104 -0
  91. data/spec/lib/transifex/coordinators_spec.rb +22 -16
  92. data/spec/lib/transifex/formats_spec.rb +8 -8
  93. data/spec/lib/transifex/language_spec.rb +9 -10
  94. data/spec/lib/transifex/languages_spec.rb +8 -8
  95. data/spec/lib/transifex/project_language_spec.rb +41 -28
  96. data/spec/lib/transifex/project_languages_spec.rb +34 -18
  97. data/spec/lib/transifex/project_spec.rb +46 -73
  98. data/spec/lib/transifex/projects_spec.rb +72 -37
  99. data/spec/lib/transifex/resource_content_spec.rb +41 -24
  100. data/spec/lib/transifex/resource_source_spec.rb +21 -19
  101. data/spec/lib/transifex/resource_spec.rb +69 -41
  102. data/spec/lib/transifex/resources_spec.rb +42 -34
  103. data/spec/lib/transifex/reviewers_spec.rb +23 -17
  104. data/spec/lib/transifex/stats_spec.rb +20 -24
  105. data/spec/lib/transifex/translation_spec.rb +60 -38
  106. data/spec/lib/transifex/translation_string_spec.rb +26 -20
  107. data/spec/lib/transifex/translation_strings_spec.rb +65 -43
  108. data/spec/lib/transifex/translators_spec.rb +23 -17
  109. data/spec/lib/transifex_spec.rb +15 -0
  110. data/spec/lib/yaml/eo.yml +3 -0
  111. data/spec/spec_helper.rb +19 -83
  112. data/spec/support/client_helper.rb +8 -0
  113. data/spec/support/content_helper.rb +346 -0
  114. data/transifex-interface-ruby.gemspec +28 -25
  115. metadata +198 -21
  116. data/spec/lib/transifex/configuration_spec.rb +0 -17
  117. data/spec/lib/yaml/resource_translation_default_content_test.yml +0 -4
  118. data/spec/lib/yaml/resource_translation_reviewed_content_test.yml +0 -9
@@ -0,0 +1,104 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: put
5
+ uri: http://www.transifex.com/api/2/project/ruby-client/resource/test/translation/en/strings
6
+ body:
7
+ encoding: UTF-8
8
+ string: '[{"key":"test_string","translation":"updated translation","source_entity_hash":"1dc9aad7928cb3cb1b400d17d39a8523"}]'
9
+ headers:
10
+ Content-Type:
11
+ - application/json
12
+ Accept:
13
+ - application/json
14
+ User-Agent:
15
+ - Transifex-interface-ruby/0.0.1
16
+ Accept-Encoding:
17
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
18
+ Authorization:
19
+ - Basic bS5naWFtYml0dG9AZnJlZWdvd2ViLml0Om1vbGxpXzAx
20
+ response:
21
+ status:
22
+ code: 200
23
+ message: OK
24
+ headers:
25
+ Server:
26
+ - nginx
27
+ Vary:
28
+ - Accept-Encoding
29
+ - Authorization, Host, Accept-Language, Cookie
30
+ Content-Type:
31
+ - text/plain
32
+ Date:
33
+ - Thu, 04 May 2017 13:55:33 GMT
34
+ Transfer-Encoding:
35
+ - chunked
36
+ Content-Language:
37
+ - en
38
+ X-Content-Type-Options:
39
+ - nosniff
40
+ Connection:
41
+ - keep-alive
42
+ Set-Cookie:
43
+ - X-Mapping-fjhppofk=A44BEC4CD0B51682CDC2AA3E9CCFDDF4; path=/
44
+ X-Frame-Options:
45
+ - SAMEORIGIN
46
+ body:
47
+ encoding: ASCII-8BIT
48
+ string: OK
49
+ http_version:
50
+ recorded_at: Thu, 04 May 2017 13:55:34 GMT
51
+ - request:
52
+ method: get
53
+ uri: http://www.transifex.com/api/2/project/ruby-client/resource/test/translation/en/string/1dc9aad7928cb3cb1b400d17d39a8523
54
+ body:
55
+ encoding: UTF-8
56
+ string: "{}"
57
+ headers:
58
+ Content-Type:
59
+ - application/json
60
+ Accept:
61
+ - application/json
62
+ User-Agent:
63
+ - Transifex-interface-ruby/0.0.1
64
+ Accept-Encoding:
65
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
66
+ Authorization:
67
+ - Basic bS5naWFtYml0dG9AZnJlZWdvd2ViLml0Om1vbGxpXzAx
68
+ response:
69
+ status:
70
+ code: 200
71
+ message: OK
72
+ headers:
73
+ Server:
74
+ - nginx
75
+ Vary:
76
+ - Accept-Encoding
77
+ - Authorization, Host, Accept-Language, Cookie
78
+ Content-Type:
79
+ - application/json; charset=utf-8
80
+ Date:
81
+ - Thu, 04 May 2017 13:55:34 GMT
82
+ Transfer-Encoding:
83
+ - chunked
84
+ Content-Language:
85
+ - en
86
+ X-Content-Type-Options:
87
+ - nosniff
88
+ Connection:
89
+ - keep-alive
90
+ Set-Cookie:
91
+ - X-Mapping-fjhppofk=100E7CB61F7D5C274279F09EADF920A3; path=/
92
+ X-Frame-Options:
93
+ - SAMEORIGIN
94
+ body:
95
+ encoding: ASCII-8BIT
96
+ string: "{\n \"comment\": \"\", \n \"context\": \"\", \n \"tags\":
97
+ null, \n \"character_limit\": null, \n \"reviewed\": false, \n \"user\":
98
+ \"nirnaeth\", \n \"key\": \"test_string\", \n \"source_string\": \"test
99
+ string\", \n \"translation\": \"updated translation\", \n \"last_update\":
100
+ \"2017-05-04T13:52:15.278\", \n \"pluralized\": false, \n \"occurrences\":
101
+ null\n}"
102
+ http_version:
103
+ recorded_at: Thu, 04 May 2017 13:55:34 GMT
104
+ recorded_with: VCR 3.0.3
@@ -0,0 +1,104 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: put
5
+ uri: http://www.transifex.com/api/2/project/ruby-client/resource/test/translation/en/string/1dc9aad7928cb3cb1b400d17d39a8523
6
+ body:
7
+ encoding: UTF-8
8
+ string: '{"reviewed":true,"translation":"translated test string"}'
9
+ headers:
10
+ Content-Type:
11
+ - application/json
12
+ Accept:
13
+ - application/json
14
+ User-Agent:
15
+ - Transifex-interface-ruby/0.0.1
16
+ Accept-Encoding:
17
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
18
+ Authorization:
19
+ - Basic bS5naWFtYml0dG9AZnJlZWdvd2ViLml0Om1vbGxpXzAx
20
+ response:
21
+ status:
22
+ code: 200
23
+ message: OK
24
+ headers:
25
+ Server:
26
+ - nginx
27
+ Vary:
28
+ - Accept-Encoding
29
+ - Authorization, Host, Accept-Language, Cookie
30
+ Content-Type:
31
+ - text/plain
32
+ Date:
33
+ - Thu, 04 May 2017 12:24:03 GMT
34
+ Transfer-Encoding:
35
+ - chunked
36
+ Content-Language:
37
+ - en
38
+ X-Content-Type-Options:
39
+ - nosniff
40
+ Connection:
41
+ - keep-alive
42
+ Set-Cookie:
43
+ - X-Mapping-fjhppofk=300CA58EE011BC6BC0E393EE4F2B31F6; path=/
44
+ X-Frame-Options:
45
+ - SAMEORIGIN
46
+ body:
47
+ encoding: ASCII-8BIT
48
+ string: OK
49
+ http_version:
50
+ recorded_at: Thu, 04 May 2017 12:24:04 GMT
51
+ - request:
52
+ method: get
53
+ uri: http://www.transifex.com/api/2/project/ruby-client/resource/test/translation/en/string/1dc9aad7928cb3cb1b400d17d39a8523
54
+ body:
55
+ encoding: UTF-8
56
+ string: "{}"
57
+ headers:
58
+ Content-Type:
59
+ - application/json
60
+ Accept:
61
+ - application/json
62
+ User-Agent:
63
+ - Transifex-interface-ruby/0.0.1
64
+ Accept-Encoding:
65
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
66
+ Authorization:
67
+ - Basic bS5naWFtYml0dG9AZnJlZWdvd2ViLml0Om1vbGxpXzAx
68
+ response:
69
+ status:
70
+ code: 200
71
+ message: OK
72
+ headers:
73
+ Server:
74
+ - nginx
75
+ Vary:
76
+ - Accept-Encoding
77
+ - Authorization, Host, Accept-Language, Cookie
78
+ Content-Type:
79
+ - application/json; charset=utf-8
80
+ Date:
81
+ - Thu, 04 May 2017 12:24:04 GMT
82
+ Transfer-Encoding:
83
+ - chunked
84
+ Content-Language:
85
+ - en
86
+ X-Content-Type-Options:
87
+ - nosniff
88
+ Connection:
89
+ - keep-alive
90
+ Set-Cookie:
91
+ - X-Mapping-fjhppofk=371E5B112B2394FA3017E8BE0809059C; path=/
92
+ X-Frame-Options:
93
+ - SAMEORIGIN
94
+ body:
95
+ encoding: ASCII-8BIT
96
+ string: "{\n \"comment\": \"\", \n \"context\": \"\", \n \"tags\":
97
+ null, \n \"character_limit\": null, \n \"reviewed\": true, \n \"user\":
98
+ \"nirnaeth\", \n \"key\": \"test_string\", \n \"source_string\": \"test
99
+ string\", \n \"translation\": \"translated test string\", \n \"last_update\":
100
+ \"2017-05-04T12:22:46.171\", \n \"pluralized\": false, \n \"occurrences\":
101
+ null\n}"
102
+ http_version:
103
+ recorded_at: Thu, 04 May 2017 12:24:04 GMT
104
+ recorded_with: VCR 3.0.3
@@ -1,32 +1,38 @@
1
- require_relative '../../spec_helper'
1
+ require "spec_helper"
2
2
 
3
3
  describe Transifex::ProjectComponents::LanguageComponents::Coordinators do
4
- before(:all) do
5
- @project = Transifex::Project.new("projet-de-test-1")
6
- end
4
+ let(:project) { Transifex::Project.new("ruby-client") }
7
5
 
8
- describe "Instanciation" do
9
- it "should raise an error when no parameters given" do
10
- expect{ Transifex::ProjectComponents::LanguageComponents::Coordinators.new }.to raise_error(Transifex::MissingParametersError)
6
+ describe "Instantiation" do
7
+ it "should raise an error if the project_slug is not provided" do
8
+ expect { Transifex::ProjectComponents::LanguageComponents::Coordinators.new }
9
+ .to raise_error(Transifex::MissingParametersError)
10
+ .with_message("The following attributes are missing: project_slug")
11
11
  end
12
12
  end
13
13
 
14
14
  describe "Fetch" do
15
- it "should not raise an error and retrieve the language's informations" do
16
- language_coordinators_infos = nil
17
- expect{ language_coordinators_infos = @project.language('en').coordinators.fetch }.to_not raise_error
18
- expect(language_coordinators_infos).to be_a_kind_of(Hash)
19
- expect(language_coordinators_infos.keys).to contain_exactly("coordinators")
15
+ it "should retrieve the language coordinators" do
16
+ VCR.use_cassette "project/language/fetch_coordinators" do
17
+ expect(project.language("en").coordinators.fetch).to eq({"coordinators"=>["wirido"]})
18
+ end
20
19
  end
21
20
  end
22
21
 
23
22
  describe "Update" do
24
- it "should not raise an error and update the coordinators list" do
25
- expect{ @project.language('en').coordinators.update(['fredericgrais'])}.to_not raise_error
23
+ it "overwrites the coordinators list" do
24
+ VCR.use_cassette "project/language/update_coordinators" do
25
+ expect(project.language("en").coordinators.update(["nirnaeth"])).to eq "OK"
26
+ expect(project.language("en").coordinators.fetch).to eq({"coordinators"=>["nirnaeth"]})
27
+ end
26
28
  end
27
29
 
28
30
  it "should raise an error if the coordinator doesn't exist" do
29
- expect{ @project.language('en').coordinators.update(['grgrgef'])}.to raise_error(Transifex::TransifexError)
31
+ VCR.use_cassette "project/language/update_non_existing_coordinator" do
32
+ expect { project.language("en").coordinators.update(["not_existing_coordinator"]) }
33
+ .to raise_error(Transifex::TransifexError)
34
+ .with_message("Users not_existing_coordinator do not exist.")
35
+ end
30
36
  end
31
37
  end
32
- end
38
+ end
@@ -1,13 +1,13 @@
1
- require_relative '../../spec_helper'
1
+ require "spec_helper"
2
2
 
3
3
  describe Transifex::Formats do
4
-
5
4
  describe "Fetch" do
6
- it "should fetch all formats without raising an error" do
7
- fetched_formats = nil
8
- expect{ fetched_formats = Transifex::Formats.fetch }.to_not raise_error
9
- expect(fetched_formats).to be_a_kind_of(Hash)
10
- expect(fetched_formats.first[1].keys).to contain_exactly("mimetype", "file-extensions", "description")
5
+ it "should fetch all formats allowed by Transifex" do
6
+
7
+ VCR.use_cassette "fetch_formats" do
8
+ formats = Transifex::Formats.fetch
9
+ expect(formats.keys).to include("KEYVALUEJSON", "YML", "TXT")
10
+ end
11
11
  end
12
12
  end
13
- end
13
+ end
@@ -1,19 +1,18 @@
1
- require_relative '../../spec_helper'
1
+ require "spec_helper"
2
2
 
3
3
  describe Transifex::Language do
4
-
5
- describe "instanciation" do
4
+ describe "Instantiation" do
6
5
  it "should raise an error if a language code is not provided" do
7
6
  expect { Transifex::Language.new }.to raise_error(Transifex::MissingParametersError)
7
+ .with_message("The following attributes are missing: language_code")
8
8
  end
9
- end
9
+ end
10
10
 
11
11
  describe "Fetch" do
12
- it "should fetch the selected language infos without raising an error" do
13
- fetched_languages = nil
14
- expect{ fetched_languages = Transifex::Languages.fetch('fr') }.to_not raise_error
15
- expect(fetched_languages).to be_a_kind_of(Hash)
16
- expect(fetched_languages.keys).to contain_exactly("rtl", "pluralequation", "code", "name", "nplurals")
12
+ it "should fetch the selected language info" do
13
+ VCR.use_cassette "language/fetch_language_info" do
14
+ expect(Transifex::Languages.fetch("fr")).to eq(language_info)
15
+ end
17
16
  end
18
17
  end
19
- end
18
+ end
@@ -1,13 +1,13 @@
1
- require_relative '../../spec_helper'
1
+ require "spec_helper"
2
2
 
3
3
  describe Transifex::Languages do
4
-
5
4
  describe "Fetch" do
6
- it "should fetch all languages infos without raising an error" do
7
- fetched_languages = nil
8
- expect{ fetched_languages = Transifex::Languages.fetch }.to_not raise_error
9
- expect(fetched_languages).to be_a_kind_of(Array)
10
- expect(fetched_languages.first.keys).to contain_exactly("rtl", "pluralequation", "code", "name", "nplurals")
5
+ it "should fetch information aviyt all languages" do
6
+ VCR.use_cassette "language/fetch_languages_info" do
7
+ info = Transifex::Languages.fetch
8
+ expect(info).to be_an Array
9
+ expect(info.first.keys).to eq(["rtl", "pluralequation", "code", "name", "nplurals"])
10
+ end
11
11
  end
12
12
  end
13
- end
13
+ end
@@ -1,49 +1,62 @@
1
- require_relative '../../spec_helper'
1
+ require "spec_helper"
2
2
 
3
3
  describe Transifex::ProjectComponents::Language do
4
- before(:all) do
5
- @project = Transifex::Project.new("projet-de-test-1")
6
- end
4
+ let(:project) { Transifex::Project.new("ruby-client") }
7
5
 
8
- describe "Instanciation" do
9
- it "should raise an error when no parameters given" do
10
- expect{ Transifex::ProjectComponents::Language.new }.to raise_error(Transifex::MissingParametersError)
6
+ describe "Instantiation" do
7
+ it "should raise an error if the project_slug is not provided" do
8
+ expect { Transifex::ProjectComponents::Language.new }.to raise_error(Transifex::MissingParametersError)
9
+ .with_message("The following attributes are missing: project_slug")
11
10
  end
12
11
  end
13
12
 
14
13
  describe "Fetch" do
15
- it "should not raise an error and retrieve the language's informations without details" do
16
- project_language_infos = nil
17
- expect{ project_language_infos = @project.language('en').fetch }.to_not raise_error
18
- expect(project_language_infos).to be_a_kind_of(Hash)
19
- expect(project_language_infos.keys).to contain_exactly("coordinators", "translators", "reviewers")
14
+ describe "#fetch" do
15
+ it "should retrieve the basic info for the language" do
16
+ VCR.use_cassette "project/language/fetch_language_info" do
17
+ expect(project.language("en").fetch).to eq(basic_language_info)
18
+ end
19
+ end
20
20
  end
21
21
 
22
- it "should not raise an error and retrieve the language's informations with details" do
23
- project_language_infos = nil
24
- expect{ project_language_infos = @project.language('en').fetch_with_details }.to_not raise_error
25
- expect(project_language_infos).to be_a_kind_of(Hash)
26
- expect(project_language_infos.keys).to contain_exactly("coordinators", "reviewers", "total_segments", "untranslated_segments", "translated_words", "reviewed_segments", "translators","translated_segments")
22
+ describe "#fetch_with_details" do
23
+ it "retrieve the complete info for the language" do
24
+ VCR.use_cassette "project/language/fetch_with_details_language_info" do
25
+ expect(project.language("en").fetch_with_details).to eq(detailed_language_info)
26
+ end
27
+ end
27
28
  end
28
29
  end
29
30
 
30
31
  describe "Update" do
31
- it "should raise an error if language doesn't exist " do
32
- expect{ @project.language('dzdzadaz').update({:coordinators => ['fredericgrais'], :translators => ['fredericgrais'], :reviewers => ['fredericgrais']}) }.to raise_error(Transifex::TransifexError)
32
+ it "should raise an error if the language doesn't exist" do
33
+ params = {coordinators: []}
34
+
35
+ VCR.use_cassette "project/language/update_non_existing_language" do
36
+ expect { project.language("non_existing_language").update(params) }.to raise_error(Transifex::TransifexError)
37
+ .with_message("Not Found")
38
+ end
33
39
  end
34
40
 
35
- it "should not raise an error and update the language's infos " do
36
- expect{ @project.language('fr').update({:coordinators => ['fredericgrais'], :translators => ['fredericgrais'], :reviewers => ['fredericgrais']}) }.to_not raise_error
41
+ it "should update the language info" do
42
+ params = {"coordinators" => ["nirnaeth"], "translators" => [], "reviewers" => ["wirido"]}
43
+
44
+ VCR.use_cassette "project/language/update_language" do
45
+ expect(project.language("en").update(params)).to eq "OK"
46
+ expect(project.language("en").fetch).to eq params
47
+ end
37
48
  end
38
49
  end
39
50
 
40
51
  describe "Delete" do
41
- before(:all) do
42
- @project.languages.create({:language_code => "it", :coordinators => ['fredericgrais']})
43
- end
44
-
45
- it "should delete the resource without raising an error" do
46
- expect{ @project.language('it').delete }.to_not raise_error
52
+ it "should delete the language" do
53
+ VCR.use_cassette "project/language/delete_language" do
54
+ project.languages.create(language_code: "it", coordinators: ["wirido"])
55
+
56
+ expect(project.language("it").delete).to be nil
57
+ expect { project.language("it").fetch }.to raise_error(Transifex::TransifexError)
58
+ .with_message("Forbidden")
59
+ end
47
60
  end
48
61
  end
49
- end
62
+ end
@@ -1,35 +1,51 @@
1
- require_relative '../../spec_helper'
1
+ require "spec_helper"
2
2
 
3
3
  describe Transifex::ProjectComponents::Languages do
4
- before(:all) do
5
- @project = Transifex::Project.new("projet-de-test-1")
6
- end
4
+ let(:project) { Transifex::Project.new("ruby-client") }
7
5
 
8
- describe "Instanciation" do
9
- it "should raise an error when no parameters given" do
10
- expect{ Transifex::ProjectComponents::Languages.new }.to raise_error(Transifex::MissingParametersError)
6
+ describe "Instantiation" do
7
+ it "should raise an error if the project_slug is not provided" do
8
+ expect { Transifex::ProjectComponents::Languages.new }
9
+ .to raise_error(Transifex::MissingParametersError)
10
+ .with_message("The following attributes are missing: project_slug")
11
11
  end
12
12
  end
13
13
 
14
14
  describe "Fetch" do
15
- it "should not raise an error and retrieve the languages informations" do
16
- project_languages = nil
17
- expect{ project_languages = @project.languages.fetch }.to_not raise_error
18
- expect(project_languages).to be_a_kind_of(Array)
19
- expect(project_languages.first.keys).to contain_exactly("coordinators", "language_code", "translators", "reviewers")
15
+ it "should retrieve the information for all languages of the project" do
16
+ VCR.use_cassette "project/components/fetch_languages" do
17
+ expect(project.languages.fetch).to eq(project_languages_info)
18
+ end
20
19
  end
21
20
  end
22
21
 
23
22
  describe "Create" do
24
- it "should not raise an error and create the new language for the project" do
25
- expect{@project.languages.create({:language_code => "el", :coordinators => ['fredericgrais']}) }.to_not raise_error
23
+ it "should create a new language for the project" do
24
+ params = {language_code: "fr", coordinators: ["wirido"]}
25
+
26
+ VCR.use_cassette "project/components/create_language" do
27
+ expect(project.languages.create(params)).to eq("Created")
28
+
29
+ project.language("fr").delete
30
+ end
26
31
  end
32
+
27
33
  it "should raise an error if the coordinator doesn't exist" do
28
- expect{@project.languages.create({:language_code => "el", :coordinators => ['fredericgrais', 'loiloililoi']}) }.to raise_error(Transifex::TransifexError)
34
+ params = {language_code: "fr", coordinators: ["non_existing"]}
35
+
36
+ VCR.use_cassette "project/components/create_language_non_existing_coordinator" do
37
+ expect { project.languages.create(params) }.to raise_error(Transifex::TransifexError)
38
+ .with_message("Users non_existing do not exist.")
39
+ end
29
40
  end
30
41
 
31
- after(:all) do
32
- @project.language('el').delete
42
+ it "should raise an error if no coordinator is provided" do
43
+ params = {language_code: "fr", coordinators: []}
44
+
45
+ VCR.use_cassette "project/components/create_language_without_coordinator" do
46
+ expect { project.languages.create(params) }.to raise_error(Transifex::TransifexError)
47
+ .with_message("There must be a coordinator set for a language.")
48
+ end
33
49
  end
34
50
  end
35
- end
51
+ end