deliver 0.0.1 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +37 -10
- data/.rspec +1 -0
- data/.travis.yml +8 -0
- data/.yardopts +1 -0
- data/Gemfile.lock +106 -0
- data/LICENSE +21 -0
- data/README.md +268 -17
- data/Rakefile +3 -0
- data/assets/PDFExample.png +0 -0
- data/assets/SubmitForReviewInformation.png +0 -0
- data/assets/deliver.png +0 -0
- data/assets/deliver.pxm +0 -0
- data/assets/deliverFullSize.png +0 -0
- data/bin/deliver +32 -0
- data/deliver.gemspec +15 -9
- data/lib/assets/DeliverfileDefault +47 -0
- data/lib/assets/DeliverfileExample +62 -0
- data/lib/assets/ScreenshotsHelp +4 -0
- data/lib/deliver.rb +20 -1
- data/lib/deliver/app.rb +146 -0
- data/lib/deliver/app_metadata.rb +487 -0
- data/lib/deliver/app_screenshot.rb +119 -0
- data/lib/deliver/commands.rb +4 -0
- data/lib/deliver/commands/init.rb +12 -0
- data/lib/deliver/commands/run.rb +20 -0
- data/lib/deliver/deliver_process.rb +241 -0
- data/lib/deliver/deliverer.rb +112 -0
- data/lib/deliver/deliverfile/deliverfile.rb +35 -0
- data/lib/deliver/deliverfile/deliverfile_creator.rb +115 -0
- data/lib/deliver/deliverfile/dsl.rb +124 -0
- data/lib/deliver/dependency_checker.rb +32 -0
- data/lib/deliver/helper.rb +55 -0
- data/lib/deliver/ipa_uploader.rb +160 -0
- data/lib/deliver/itunes_connect.rb +514 -0
- data/lib/deliver/itunes_search_api.rb +48 -0
- data/lib/deliver/itunes_transporter.rb +154 -0
- data/lib/deliver/languages.rb +6 -0
- data/lib/deliver/metadata_item.rb +94 -0
- data/lib/deliver/password_manager.rb +86 -0
- data/lib/deliver/pdf_generator.rb +131 -0
- data/lib/deliver/version.rb +1 -1
- data/spec/app_metadata_spec.rb +350 -0
- data/spec/app_screenshot_spec.rb +88 -0
- data/spec/app_spec.rb +85 -0
- data/spec/deliverer_spec.rb +48 -0
- data/spec/deliverfile_creator_spec.rb +73 -0
- data/spec/example_deliver_files_spec.rb +227 -0
- data/spec/fixtures/Deliverfiles/DeliverfileCallbacks +14 -0
- data/spec/fixtures/Deliverfiles/DeliverfileCallbacksFailingTests +14 -0
- data/spec/fixtures/Deliverfiles/DeliverfileCallbacksNoErrorBlock +6 -0
- data/spec/fixtures/Deliverfiles/DeliverfileDefaultLanguageNotOnTop +8 -0
- data/spec/fixtures/Deliverfiles/DeliverfileDuplicateIpa +2 -0
- data/spec/fixtures/Deliverfiles/DeliverfileLocales +16 -0
- data/spec/fixtures/Deliverfiles/DeliverfileMetadataJson +6 -0
- data/spec/fixtures/Deliverfiles/DeliverfileMissingAppVersion +1 -0
- data/spec/fixtures/Deliverfiles/DeliverfileMissingBlockForTests +7 -0
- data/spec/fixtures/Deliverfiles/DeliverfileMissingIdentifier +1 -0
- data/spec/fixtures/Deliverfiles/DeliverfileMissingLanguage +1 -0
- data/spec/fixtures/Deliverfiles/DeliverfileMissingValue +3 -0
- data/spec/fixtures/Deliverfiles/DeliverfileMixed +37 -0
- data/spec/fixtures/Deliverfiles/DeliverfileNoVersion +3 -0
- data/spec/fixtures/Deliverfiles/DeliverfileScreenshots +6 -0
- data/spec/fixtures/Deliverfiles/DeliverfileScreenshotsFallbackDefaultLanguage +7 -0
- data/spec/fixtures/Deliverfiles/DeliverfileSimple +8 -0
- data/spec/fixtures/Deliverfiles/DeliverfileVersionMismatchPackage +8 -0
- data/spec/fixtures/Deliverfiles/DeliverfileWrongIdentifier +5 -0
- data/spec/fixtures/Deliverfiles/DeliverfileWrongVersion +5 -0
- data/spec/fixtures/Deliverfiles/metadata.json +24 -0
- data/spec/fixtures/example1.itmsp/metadata.xml +121 -0
- data/spec/fixtures/example2.itmsp/metadata.xml +54 -0
- data/spec/fixtures/ipas/Example1.ipa +0 -0
- data/spec/fixtures/metadata/ipa_result.xml +12 -0
- data/spec/fixtures/metadata/ipa_result2.xml +12 -0
- data/spec/fixtures/packages/464686641.itmsp/metadata.xml +104 -0
- data/spec/fixtures/packages/794902327.itmsp/metadata.xml +107 -0
- data/spec/fixtures/packages/878567776.itmsp/metadata.xml +104 -0
- data/spec/fixtures/screenshots/de-DE/iPhone4.png +0 -0
- data/spec/fixtures/screenshots/de-DE/iPhone6.png +0 -0
- data/spec/fixtures/screenshots/de-DE/iPhone6Plus1.png +0 -0
- data/spec/fixtures/screenshots/de-DE/iPhone6Plus2.png +0 -0
- data/spec/fixtures/screenshots/de-DE/screenshot1.png +0 -0
- data/spec/fixtures/screenshots/de-DE/screenshot2.png +0 -0
- data/spec/fixtures/screenshots/de-DE/screenshot3.png +0 -0
- data/spec/fixtures/screenshots/de-DE/screenshot5.png +0 -0
- data/spec/fixtures/screenshots/en-US/english.png +0 -0
- data/spec/fixtures/screenshots/iPhone4.png +0 -0
- data/spec/fixtures/screenshots/invalidImage.png +0 -0
- data/spec/fixtures/screenshots/screenshot1.png +0 -0
- data/spec/fixtures/screenshots/tooMany/de-DE/iPhone4 2.png +0 -0
- data/spec/fixtures/screenshots/tooMany/de-DE/iPhone4 copy 2.png +0 -0
- data/spec/fixtures/screenshots/tooMany/de-DE/iPhone4 copy 3.png +0 -0
- data/spec/fixtures/screenshots/tooMany/de-DE/iPhone4 copy 4.png +0 -0
- data/spec/fixtures/screenshots/tooMany/de-DE/iPhone4 copy 5.png +0 -0
- data/spec/fixtures/screenshots/tooMany/de-DE/iPhone4 copy 6.png +0 -0
- data/spec/fixtures/screenshots/tooMany/de-DE/iPhone4 copy.png +0 -0
- data/spec/fixtures/screenshots/tooMany/de-DE/iPhone4.png +0 -0
- data/spec/helper_spec.rb +16 -0
- data/spec/ipa_uploader_spec.rb +61 -0
- data/spec/itunes_connect_spec.rb +12 -0
- data/spec/itunes_search_api_spec.rb +24 -0
- data/spec/itunes_transporter_spec.rb +52 -0
- data/spec/languages_spec.rb +7 -0
- data/spec/metadata_item_spec.rb +36 -0
- data/spec/mocking/transporter_mocking.rb +40 -0
- data/spec/mocking/webmocking.rb +31 -0
- data/spec/password_manager_spec.rb +27 -0
- data/spec/responses/itunesLookup-.json +4 -0
- data/spec/responses/itunesLookup-0.json +4 -0
- data/spec/responses/itunesLookup-284882215.json +106 -0
- data/spec/responses/itunesLookup-at.felixkrause.iTanky.json +8 -0
- data/spec/responses/itunesLookup-com.facebook.Facebook.json +106 -0
- data/spec/responses/itunesLookup-invalid.json +4 -0
- data/spec/responses/itunesLookup-net.sunapps.invalid.json +4 -0
- data/spec/responses/transporter/download_invalid_apple_id.txt +35 -0
- data/spec/responses/transporter/download_valid_apple_id.txt +32 -0
- data/spec/responses/transporter/upload_invalid.txt +174 -0
- data/spec/responses/transporter/upload_valid.txt +290 -0
- data/spec/spec_helper.rb +23 -0
- data/tasks/rspec.rake +3 -0
- metadata +242 -8
- data/LICENSE.txt +0 -22
@@ -0,0 +1,104 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<package xmlns="http://apple.com/itunes/importer" version="software5.2">
|
3
|
+
<!-- This document was generated on Oct 16, 2014 1:04:27 PM for felix@sunapps.net <felix@sunapps.net>. -->
|
4
|
+
<!-- NOTE: metadata_token is generated on lookup. Modifying the value of this will result in an import error -->
|
5
|
+
<metadata_token>1413489867655-asdfasdfasdfasdf</metadata_token>
|
6
|
+
<provider>5A997XSHK2</provider>
|
7
|
+
<team_id>5A997XSHK2</team_id>
|
8
|
+
<software>
|
9
|
+
<!--Apple ID: 878567776-->
|
10
|
+
<vendor_id>54</vendor_id>
|
11
|
+
<read_only_info>
|
12
|
+
<read_only_value key="apple-id">878567776</read_only_value>
|
13
|
+
</read_only_info>
|
14
|
+
<software_metadata>
|
15
|
+
<versions>
|
16
|
+
<version string="943.0">
|
17
|
+
<locales>
|
18
|
+
<locale name="en-US">
|
19
|
+
<title>Die ultimative iPhone App</title>
|
20
|
+
<description>App Beschreibung</description>
|
21
|
+
<keywords>
|
22
|
+
<keyword>keyword1</keyword>
|
23
|
+
<keyword>something</keyword>
|
24
|
+
<keyword>else</keyword>
|
25
|
+
</keywords>
|
26
|
+
<version_whats_new>Danke für das Lesen dieses Tests</version_whats_new>
|
27
|
+
<software_url>http://www.sunapps.net</software_url>
|
28
|
+
<support_url>http://support.sunapps.net</support_url>
|
29
|
+
<software_screenshots>
|
30
|
+
<software_screenshot display_target="iOS-3.5-in" position="1">
|
31
|
+
<size>144787</size>
|
32
|
+
<file_name>c9941d1d8b68fd89a5b639fa3e726e98.png</file_name>
|
33
|
+
<checksum type="md5">c9941d1d8b68fd89a5b639fa3e726e98</checksum>
|
34
|
+
</software_screenshot>
|
35
|
+
<software_screenshot display_target="iOS-3.5-in" position="2">
|
36
|
+
<size>457626</size>
|
37
|
+
<file_name>6aa173cc2aa7ea07c3825468959135a6.png</file_name>
|
38
|
+
<checksum type="md5">6aa173cc2aa7ea07c3825468959135a6</checksum>
|
39
|
+
</software_screenshot>
|
40
|
+
<software_screenshot display_target="iOS-3.5-in" position="3">
|
41
|
+
<size>406020</size>
|
42
|
+
<file_name>869daf2d0f34e3560f114f2602f8181b.png</file_name>
|
43
|
+
<checksum type="md5">869daf2d0f34e3560f114f2602f8181b</checksum>
|
44
|
+
</software_screenshot>
|
45
|
+
<software_screenshot display_target="iOS-3.5-in" position="4">
|
46
|
+
<size>1071380</size>
|
47
|
+
<file_name>ca064467f87e83c9eaec48dab9c6ef31.png</file_name>
|
48
|
+
<checksum type="md5">ca064467f87e83c9eaec48dab9c6ef31</checksum>
|
49
|
+
</software_screenshot>
|
50
|
+
<software_screenshot display_target="iOS-3.5-in" position="5">
|
51
|
+
<size>312901</size>
|
52
|
+
<file_name>79a1320e0def4bfde03259ac702773bb.png</file_name>
|
53
|
+
<checksum type="md5">79a1320e0def4bfde03259ac702773bb</checksum>
|
54
|
+
</software_screenshot>
|
55
|
+
<software_screenshot display_target="iOS-4-in" position="1">
|
56
|
+
<size>160837</size>
|
57
|
+
<file_name>c8e24017bb4e733a2450a3d5106231af.png</file_name>
|
58
|
+
<checksum type="md5">c8e24017bb4e733a2450a3d5106231af</checksum>
|
59
|
+
</software_screenshot>
|
60
|
+
<software_screenshot display_target="iOS-4-in" position="2">
|
61
|
+
<size>493813</size>
|
62
|
+
<file_name>c86a66a67d8749f555b02b30580226d2.png</file_name>
|
63
|
+
<checksum type="md5">c86a66a67d8749f555b02b30580226d2</checksum>
|
64
|
+
</software_screenshot>
|
65
|
+
<software_screenshot display_target="iOS-4-in" position="3">
|
66
|
+
<size>420578</size>
|
67
|
+
<file_name>7100533af94802f3f8dc22f8ff2bfe20.png</file_name>
|
68
|
+
<checksum type="md5">7100533af94802f3f8dc22f8ff2bfe20</checksum>
|
69
|
+
</software_screenshot>
|
70
|
+
<software_screenshot display_target="iOS-4-in" position="4">
|
71
|
+
<size>1198170</size>
|
72
|
+
<file_name>bba7886c43a01d12091be04cae5cdff7.png</file_name>
|
73
|
+
<checksum type="md5">bba7886c43a01d12091be04cae5cdff7</checksum>
|
74
|
+
</software_screenshot>
|
75
|
+
<software_screenshot display_target="iOS-4-in" position="5">
|
76
|
+
<size>327234</size>
|
77
|
+
<file_name>6054fba995f604fc4137ee67762c1858.png</file_name>
|
78
|
+
<checksum type="md5">6054fba995f604fc4137ee67762c1858</checksum>
|
79
|
+
</software_screenshot>
|
80
|
+
</software_screenshots>
|
81
|
+
</locale>
|
82
|
+
</locales>
|
83
|
+
</version>
|
84
|
+
|
85
|
+
</versions>
|
86
|
+
<products>
|
87
|
+
<product>
|
88
|
+
<territory>WW</territory>
|
89
|
+
<cleared_for_sale>true</cleared_for_sale>
|
90
|
+
<sales_start_date>2014-05-14</sales_start_date>
|
91
|
+
<intervals>
|
92
|
+
<!--The following <interval> element represents a snapshot of present and future pricing and availability information.
|
93
|
+
In other words, past data may not be reflected by this interval.-->
|
94
|
+
<interval>
|
95
|
+
<start_date>2014-10-16</start_date>
|
96
|
+
<wholesale_price_tier>0</wholesale_price_tier>
|
97
|
+
</interval>
|
98
|
+
</intervals>
|
99
|
+
<allow_volume_discount>true</allow_volume_discount>
|
100
|
+
</product>
|
101
|
+
</products>
|
102
|
+
</software_metadata>
|
103
|
+
</software>
|
104
|
+
</package>
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
data/spec/helper_spec.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
describe Deliver do
|
2
|
+
describe Deliver::Helper do
|
3
|
+
|
4
|
+
if OS.mac?
|
5
|
+
it "#xcode_path" do
|
6
|
+
expect(Deliver::Helper.xcode_path[-1]).to eq('/')
|
7
|
+
expect(Deliver::Helper.xcode_path).to eq("/Applications/Xcode.app/Contents/Developer/")
|
8
|
+
end
|
9
|
+
|
10
|
+
it "#transporter_path" do
|
11
|
+
expect(Deliver::Helper.transporter_path).to eq("/Applications/Xcode.app/Contents/Developer/../Applications/Application\\ Loader.app/Contents/MacOS/itms/bin/iTMSTransporter")
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
describe Deliver do
|
2
|
+
describe Deliver::IpaUploader do
|
3
|
+
let (:apple_id) { 794902327 }
|
4
|
+
let (:app_identifier) { 'net.sunapps.1' }
|
5
|
+
|
6
|
+
before do
|
7
|
+
@app = Deliver::App.new(apple_id: apple_id, app_identifier: app_identifier)
|
8
|
+
end
|
9
|
+
|
10
|
+
describe "#init" do
|
11
|
+
it "raises an exception, when ipa file could not be found" do
|
12
|
+
expect {
|
13
|
+
Deliver::IpaUploader.new(@app, "/tmp", "./nonExistent.ipa", true)
|
14
|
+
}.to raise_error("IPA on path './nonExistent.ipa' not found")
|
15
|
+
end
|
16
|
+
|
17
|
+
it "raises an exception, when ipa file is not an ipa file" do
|
18
|
+
expect {
|
19
|
+
Deliver::IpaUploader.new(@app, "/tmp", "./spec/fixtures/screenshots/iPhone4.png", true)
|
20
|
+
}.to raise_error("IPA on path './spec/fixtures/screenshots/iPhone4.png' is not a valid IPA file")
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
describe "after init" do
|
25
|
+
before do
|
26
|
+
@uploader = Deliver::IpaUploader.new(@app, "/tmp", "./spec/fixtures/ipas/Example1.ipa", false)
|
27
|
+
end
|
28
|
+
|
29
|
+
describe "#fetch_app_identifier" do
|
30
|
+
it "returns the valid identifier based on the Info.plist file" do
|
31
|
+
expect(@uploader.fetch_app_identifier).to eq("at.felixkrause.iTanky")
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
describe "#fetch_app_version" do
|
36
|
+
it "returns the valid version based on the Info.plist file" do
|
37
|
+
expect(@uploader.fetch_app_version).to eq("1.0")
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
describe "#start" do
|
43
|
+
it "properly loads and stores the ipa when it's valid" do
|
44
|
+
Deliver::ItunesTransporter.set_mock_file("spec/responses/transporter/upload_valid.txt")
|
45
|
+
|
46
|
+
uploader = Deliver::IpaUploader.new(@app, "/tmp", "./spec/fixtures/ipas/Example1.ipa", false)
|
47
|
+
|
48
|
+
expect(uploader.app.apple_id).to eq(apple_id)
|
49
|
+
|
50
|
+
expect(uploader.upload!).to eq(true)
|
51
|
+
|
52
|
+
expect(uploader.fetch_value("//x:size").first.content.to_i).to eq(2056240)
|
53
|
+
expect(uploader.fetch_value("//x:checksum").first.content).to eq("094c6abbfd3a22e7e0ebc85c5f650882")
|
54
|
+
expect(uploader.fetch_value("//x:file_name").first.content).to eq("304c8f3176463c89c28fe3a8ea6c726b.ipa")
|
55
|
+
|
56
|
+
content = File.read("/tmp/#{apple_id}.itmsp/metadata.xml").to_s
|
57
|
+
expect(content).to eq(File.read("./spec/fixtures/metadata/ipa_result2.xml").to_s)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
describe Deliver do
|
2
|
+
describe Deliver::ItunesConnect do
|
3
|
+
describe "#update_app_icon" do
|
4
|
+
# it "raises an error when image resolution is wrong" do
|
5
|
+
# app = Deliver::App.new(apple_id: 912330783, app_identifier: 'net.sunapps.54')
|
6
|
+
# expect {
|
7
|
+
# Deliver::ItunesConnect.new.update_app_icon!(app, './spec/fixtures/screenshots/iPhone4.png')
|
8
|
+
# }.to raise_error "App icon must have the resolution of 1024x1024px"
|
9
|
+
# end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
describe Deliver do
|
2
|
+
describe Deliver::ItunesSearchApi do
|
3
|
+
it "returns nil when it could not be found" do
|
4
|
+
expect(Deliver::ItunesSearchApi.fetch("invalid")).to eq(nil)
|
5
|
+
expect(Deliver::ItunesSearchApi.fetch("")).to eq(nil)
|
6
|
+
expect(Deliver::ItunesSearchApi.fetch(0)).to eq(nil)
|
7
|
+
end
|
8
|
+
|
9
|
+
it "returns the actual object if it could be found" do
|
10
|
+
response = Deliver::ItunesSearchApi.fetch("284882215")
|
11
|
+
expect(response['kind']).to eq('software')
|
12
|
+
expect(response['supportedDevices'].count).to be > 8
|
13
|
+
|
14
|
+
expect(Deliver::ItunesSearchApi.fetch_bundle_identifier("284882215")).to eq('com.facebook.Facebook')
|
15
|
+
end
|
16
|
+
|
17
|
+
it "returns the actual object if it could be found" do
|
18
|
+
response = Deliver::ItunesSearchApi.fetch_by_identifier("com.facebook.Facebook")
|
19
|
+
expect(response['kind']).to eq('software')
|
20
|
+
expect(response['supportedDevices'].count).to be > 8
|
21
|
+
expect(response['trackId']).to eq(284882215)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
describe Deliver do
|
2
|
+
describe Deliver::ItunesTransporter do
|
3
|
+
before do
|
4
|
+
@app = Deliver::App.new(apple_id: 284882215, app_identifier: 'com.facebook.Facebook')
|
5
|
+
end
|
6
|
+
|
7
|
+
describe "#download" do
|
8
|
+
it "throws an exception when invalid parameter is given" do
|
9
|
+
expect {
|
10
|
+
Deliver::ItunesTransporter.new.download(123)
|
11
|
+
}.to raise_error "No valid Deliver::App given"
|
12
|
+
end
|
13
|
+
|
14
|
+
it "invalid login information" do
|
15
|
+
Deliver::ItunesTransporter.set_mock_file("spec/responses/transporter/download_invalid_apple_id.txt")
|
16
|
+
expect {
|
17
|
+
expect(Deliver::ItunesTransporter.new("email@email.com", "login").download(@app)).to eq(true)
|
18
|
+
}.to raise_error(/.*This Apple ID has been locked for security reasons.*/)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
describe "#upload" do
|
23
|
+
it "properly uploads the package file" do
|
24
|
+
@app.apple_id = 878567776
|
25
|
+
|
26
|
+
Deliver::ItunesTransporter.set_mock_file("spec/responses/transporter/download_valid_apple_id.txt")
|
27
|
+
|
28
|
+
FileUtils.cp_r "./spec/fixtures/example2.itmsp/", '/tmp'
|
29
|
+
|
30
|
+
path = "/tmp/example2.itmsp"
|
31
|
+
|
32
|
+
@app.set_metadata_directory(path)
|
33
|
+
|
34
|
+
@app.metadata # download & parse the latest metadata
|
35
|
+
|
36
|
+
Deliver::ItunesTransporter.set_mock_file("spec/responses/transporter/upload_valid.txt")
|
37
|
+
expect(@app.upload_metadata!).to eq(true)
|
38
|
+
|
39
|
+
|
40
|
+
Deliver::ItunesTransporter.set_mock_file("spec/responses/transporter/upload_valid.txt")
|
41
|
+
@ipa = Deliver::IpaUploader.new(@app, '/tmp/', "./spec/fixtures/ipas/Example1.ipa", false)
|
42
|
+
expect(@ipa.upload!).to eq(true)
|
43
|
+
|
44
|
+
# Verify the example2/metadata.xml is correct
|
45
|
+
content = File.read("/tmp/#{@app.apple_id}.itmsp/metadata.xml").to_s
|
46
|
+
expect(content).to eq(File.read("./spec/fixtures/metadata/ipa_result.xml").to_s)
|
47
|
+
|
48
|
+
FileUtils.rm_rf(path)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
describe Deliver do
|
2
|
+
describe Deliver::MetadataItem do
|
3
|
+
let (:path) { "./spec/fixtures/screenshots/iPhone4.png" }
|
4
|
+
|
5
|
+
describe "#init" do
|
6
|
+
it "raises an exception if file was not found" do
|
7
|
+
other_path = "./notHere.png"
|
8
|
+
expect {
|
9
|
+
Deliver::MetadataItem.new(other_path)
|
10
|
+
}.to raise_error("File not found at path '#{other_path}'")
|
11
|
+
end
|
12
|
+
|
13
|
+
it "properly saves the path" do
|
14
|
+
res = Deliver::MetadataItem.new(path)
|
15
|
+
expect(res.path).to eq(path)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
describe "after init" do
|
20
|
+
before do
|
21
|
+
@item = Deliver::MetadataItem.new(path)
|
22
|
+
@doc = Nokogiri::XML(File.read("./spec/fixtures/example1.itmsp/metadata.xml"))
|
23
|
+
end
|
24
|
+
|
25
|
+
describe "#create_xml_node" do
|
26
|
+
it "properly creates a valid nokogiri xml node" do
|
27
|
+
node = @item.create_xml_node(@doc)
|
28
|
+
expect(node.children.first.content).to eq(File.size(path).to_s)
|
29
|
+
expect(node.children[1].content).to eq("c85dd7b9040bdf34e844d26a144707ab.png")
|
30
|
+
expect(node.children.last['type']).to eq("md5")
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module Deliver
|
2
|
+
|
3
|
+
class ItunesTransporter
|
4
|
+
|
5
|
+
def self.set_mock_file(file_name)
|
6
|
+
raise "File #{file_name} not found" unless File.exists?file_name
|
7
|
+
@@mocking_file = [] unless defined?@@mocking_file
|
8
|
+
@@mocking_file << file_name
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.clear_mock_files
|
12
|
+
@@mocking_file = []
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
def execute_transporter(command)
|
17
|
+
current = @@mocking_file.shift if defined?@@mocking_file and @@mocking_file
|
18
|
+
raise "You have to set a mock file for this test!" unless defined?current and current
|
19
|
+
|
20
|
+
@errors = []
|
21
|
+
@warnings = []
|
22
|
+
|
23
|
+
File.readlines(current).each do |line|
|
24
|
+
parse_line(line)
|
25
|
+
end
|
26
|
+
|
27
|
+
if @errors.count > 0
|
28
|
+
Helper.log.debug(caller)
|
29
|
+
raise TransporterTransferError.new(@errors.join("\n"))
|
30
|
+
end
|
31
|
+
|
32
|
+
if @warnings.count > 0
|
33
|
+
Helper.log.warn(@warnings.join("\n"))
|
34
|
+
end
|
35
|
+
|
36
|
+
true
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
WebMock.disable_net_connect!(:allow => 'codeclimate.com')
|
2
|
+
|
3
|
+
# iTunes Lookup API
|
4
|
+
RSpec.configure do |config|
|
5
|
+
config.before(:each) do
|
6
|
+
|
7
|
+
# iTunes Lookup API by Apple ID
|
8
|
+
["invalid", "", 0, '284882215'].each do |current|
|
9
|
+
stub_request(:get, "https://itunes.apple.com/lookup?id=#{current.to_s}").
|
10
|
+
with(:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'User-Agent'=>'Ruby'}).
|
11
|
+
to_return(:status => 200, :body => File.read("spec/responses/itunesLookup-#{current.to_s}.json"), :headers => {})
|
12
|
+
|
13
|
+
# iTunes Lookup API by App Identifier
|
14
|
+
stub_request(:get, "https://itunes.apple.com/lookup?bundleId=com.facebook.Facebook").
|
15
|
+
with(:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'User-Agent'=>'Ruby'}).
|
16
|
+
to_return(:status => 200, :body => File.read("spec/responses/itunesLookup-com.facebook.Facebook.json"), :headers => {})
|
17
|
+
|
18
|
+
stub_request(:get, "https://itunes.apple.com/lookup?bundleId=at.felixkrause.iTanky").
|
19
|
+
with(:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'User-Agent'=>'Ruby'}).
|
20
|
+
to_return(:status => 200, :body => File.read("spec/responses/itunesLookup-at.felixkrause.iTanky.json"), :headers => {})
|
21
|
+
|
22
|
+
stub_request(:get, "https://itunes.apple.com/lookup?bundleId=net.sunapps.54").
|
23
|
+
with(:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'User-Agent'=>'Ruby'}).
|
24
|
+
to_return(:status => 200, :body => File.read("spec/responses/itunesLookup-com.facebook.Facebook.json"), :headers => {})
|
25
|
+
|
26
|
+
stub_request(:get, "https://itunes.apple.com/lookup?bundleId=net.sunapps.invalid").
|
27
|
+
with(:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'User-Agent'=>'Ruby'}).
|
28
|
+
to_return(:status => 200, :body => File.read("spec/responses/itunesLookup-net.sunapps.invalid.json"), :headers => {})
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|