ios_config_profile 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.codeclimate.yml +9 -0
- data/.gitignore +35 -0
- data/.rspec +2 -0
- data/.rubocop.yml +602 -0
- data/.simplecov +4 -0
- data/CHANGELOG.md +67 -0
- data/CODE_OF_CONDUCT.md +13 -0
- data/Gemfile +5 -0
- data/LICENSE +661 -0
- data/README.md +15 -0
- data/Rakefile +5 -0
- data/ios_config_profile.gemspec +28 -0
- data/lib/ios_config_profile.rb +8 -0
- data/lib/ios_config_profile/basic_payload.rb +31 -0
- data/lib/ios_config_profile/command_payload.rb +24 -0
- data/lib/ios_config_profile/content/install_application_payload.rb +23 -0
- data/lib/ios_config_profile/content/install_book_payload.rb +23 -0
- data/lib/ios_config_profile/content/install_doc_payload.rb +27 -0
- data/lib/ios_config_profile/content/install_market_app_payload.rb +23 -0
- data/lib/ios_config_profile/content/installed_application_list_payload.rb +17 -0
- data/lib/ios_config_profile/content/remove_application_payload.rb +22 -0
- data/lib/ios_config_profile/content/remove_book_payload.rb +23 -0
- data/lib/ios_config_profile/content/remove_doc_payload.rb +23 -0
- data/lib/ios_config_profile/content/web_clip_payload.rb +38 -0
- data/lib/ios_config_profile/device/app_lock_payload.rb +33 -0
- data/lib/ios_config_profile/device/clear_passcode_payload.rb +24 -0
- data/lib/ios_config_profile/device/dep_payload.rb +40 -0
- data/lib/ios_config_profile/device/device_information_payload.rb +69 -0
- data/lib/ios_config_profile/device/enrollment_payload.rb +25 -0
- data/lib/ios_config_profile/device/erase_device_payload.rb +18 -0
- data/lib/ios_config_profile/device/install_profile_payload.rb +22 -0
- data/lib/ios_config_profile/device/lock_device_payload.rb +17 -0
- data/lib/ios_config_profile/device/mdm_payload.rb +40 -0
- data/lib/ios_config_profile/device/remove_profile_payload.rb +22 -0
- data/lib/ios_config_profile/device/restrictions_payload.rb +144 -0
- data/lib/ios_config_profile/device/scep_payload.rb +34 -0
- data/lib/ios_config_profile/device/security_payload.rb +32 -0
- data/lib/ios_config_profile/device/set_device_name_payload.rb +22 -0
- data/lib/ios_config_profile/device/vpn_payload.rb +86 -0
- data/lib/ios_config_profile/encrypted_payload.rb +14 -0
- data/lib/ios_config_profile/version.rb +4 -0
- data/spec/basic_payload_spec.rb +53 -0
- data/spec/command_payload_spec.rb +12 -0
- data/spec/content/install_application_payload_spec.rb +15 -0
- data/spec/content/install_book_payload_spec.rb +14 -0
- data/spec/content/install_doc_payload_spec.rb +16 -0
- data/spec/content/install_market_app_payload_spec.rb +15 -0
- data/spec/content/installed_application_list_payload_spec.rb +13 -0
- data/spec/content/remove_application_payoad_spec.rb +13 -0
- data/spec/content/remove_book_payload_spec.rb +14 -0
- data/spec/content/remove_doc_payload_spec.rb +18 -0
- data/spec/content/web_clip_payload_spec.rb +22 -0
- data/spec/device/app_lock_payload_spec.rb +23 -0
- data/spec/device/clear_passcode_payload_spec.rb +14 -0
- data/spec/device/dep_payload_spec.rb +18 -0
- data/spec/device/device_information_payload_spec.rb +28 -0
- data/spec/device/enrollment_payload_spec.rb +18 -0
- data/spec/device/erase_device_payload_spec.rb +11 -0
- data/spec/device/install_profile_payload_spec.rb +13 -0
- data/spec/device/lock_device_payload_spec.rb +11 -0
- data/spec/device/mdm_payload_spec.rb +41 -0
- data/spec/device/remove_profile_payload_spec.rb +14 -0
- data/spec/device/restrictions_payload_spec.rb +42 -0
- data/spec/device/scep_payload_spec.rb +14 -0
- data/spec/device/security_payload_spec.rb +29 -0
- data/spec/device/set_device_name_payload_spec.rb +14 -0
- data/spec/device/vpn_payload_spec.rb +75 -0
- data/spec/encrypted_payload_spec.rb +26 -0
- data/spec/spec_helper.rb +14 -0
- metadata +241 -0
@@ -0,0 +1,86 @@
|
|
1
|
+
module IOSConfigProfile
|
2
|
+
class VPNPayload < Hash
|
3
|
+
include IOSConfigProfile::BasicPayload
|
4
|
+
|
5
|
+
# Hash containing :override_primary, :vpn_type
|
6
|
+
attr_accessor :vpn_config
|
7
|
+
|
8
|
+
def initialize(config)
|
9
|
+
self.vpn_config = config
|
10
|
+
require_attributes :vpn_config
|
11
|
+
merge! vpn_payload
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
|
16
|
+
def vpn_payload
|
17
|
+
{
|
18
|
+
"PayloadContent" => [{
|
19
|
+
"PayloadType" => "com.apple.vpn.managed",
|
20
|
+
"PayloadIdentifier" => "com.cellabus.vpn",
|
21
|
+
"PayloadDescription" => "Set up VPN networking access",
|
22
|
+
"PayloadUUID" => uuid,
|
23
|
+
"PayloadVersion" => 1,
|
24
|
+
"UserDefinedName" => "VPN",
|
25
|
+
"OverridePrimary" => vpn_config[:override_primary],
|
26
|
+
"VPNType" => vpn_config[:vpn_type],
|
27
|
+
"OnDemandEnabled" => 0,
|
28
|
+
"OnDemandRules" => [],
|
29
|
+
"VendorConfig" => get_vendor_config,
|
30
|
+
}],
|
31
|
+
"PayloadType" => "Configuration",
|
32
|
+
"PayloadDisplayName" => "Cellabus VPN Configuration",
|
33
|
+
"PayloadIdentifier" => "com.cellabus.vpn",
|
34
|
+
"PayloadUUID" => uuid,
|
35
|
+
"PayloadVersion" => 1,
|
36
|
+
}
|
37
|
+
end
|
38
|
+
|
39
|
+
def get_vendor_config
|
40
|
+
if vpn_config[:vpn_type] == "L2TP"
|
41
|
+
get_l2tp_config
|
42
|
+
elsif vpn_config[:vpn_type] == "PPTP"
|
43
|
+
raise NotImplementedError
|
44
|
+
elsif vpn_config[:vpn_type] == "IPSec"
|
45
|
+
get_ipsec_config
|
46
|
+
elsif vpn_config[:vpn_type] == "IKEv2"
|
47
|
+
raise NotImplementedError
|
48
|
+
elsif vpn_config[:vpn_type] == "AlwaysOn"
|
49
|
+
raise NotImplementedError
|
50
|
+
else
|
51
|
+
raise NotImplementedError
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def get_l2tp_config
|
56
|
+
{
|
57
|
+
"AuthName" => vpn_config[:auth_name],
|
58
|
+
"AuthPassword" => vpn_config[:auth_password],
|
59
|
+
"TokenCard" => false,
|
60
|
+
"CommRemoteAccess" => vpn_config[:comm_remote_access],
|
61
|
+
"AuthEAPPlugins" => [],
|
62
|
+
"AuthProtocol" => [],
|
63
|
+
"CCPMPPE40Enabled" => false,
|
64
|
+
"CCPMPPE128Enabled" => false,
|
65
|
+
"CCPEnabled" => false,
|
66
|
+
}
|
67
|
+
end
|
68
|
+
|
69
|
+
def get_ipsec_config
|
70
|
+
config = {
|
71
|
+
"RemoteAddress" => vpn_config[:remote_address],
|
72
|
+
"AuthenticationMethod" => vpn_config[:authentication_method],
|
73
|
+
"XAuthName" => vpn_config[:x_auth_name],
|
74
|
+
"XAuthEnabled" => vpn_config[:x_auth_enabled],
|
75
|
+
"SharedSecret" => vpn_config[:shared_secret],
|
76
|
+
"PayloadCertificateUUID" => vpn_config[:payload_certificate_uuid],
|
77
|
+
"PromptForVPNPIN" => vpn_config[:prompt_for_vpn_pin],
|
78
|
+
}
|
79
|
+
if vpn_config[:authentication_method] == "SharedSecret"
|
80
|
+
config["LocalIdentifier"] = vpn_config[:local_identifier]
|
81
|
+
config["LocalIdentifierType"] = vpn_config[:local_identifier_type]
|
82
|
+
end
|
83
|
+
config
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module IOSConfigProfile
|
2
|
+
class EncryptedPayload < IOSCertEnrollment::Profile
|
3
|
+
def initialize(payload)
|
4
|
+
super()
|
5
|
+
self.payload = payload.to_plist
|
6
|
+
end
|
7
|
+
|
8
|
+
# Encrypts the profile, wraps it into configuration profile and signs it
|
9
|
+
def encrypted_configuration(p7sign_certificates)
|
10
|
+
encrypted_profile = encrypt p7sign_certificates
|
11
|
+
configuration encrypted_profile.certificate
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe IOSConfigProfile::BasicPayload do
|
4
|
+
class Payload
|
5
|
+
include IOSConfigProfile::BasicPayload
|
6
|
+
|
7
|
+
def to_plist
|
8
|
+
"payload in plist format"
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
let(:payload) { Payload.new }
|
13
|
+
|
14
|
+
describe "#uuid" do
|
15
|
+
it "returns a uuid" do
|
16
|
+
uuid1 = payload.uuid
|
17
|
+
uuid2 = Payload.new.uuid
|
18
|
+
expect(uuid1).to_not eq uuid2
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
describe '#to_encrypted_payload' do
|
23
|
+
let(:payload) { Payload.new }
|
24
|
+
|
25
|
+
subject { payload.to_encrypted_payload }
|
26
|
+
|
27
|
+
it { is_expected.to be_an IOSConfigProfile::EncryptedPayload }
|
28
|
+
its(:payload) { should == "payload in plist format" }
|
29
|
+
end
|
30
|
+
|
31
|
+
describe '#to_command_payload' do
|
32
|
+
let(:payload) { Payload.new }
|
33
|
+
|
34
|
+
subject { payload.to_command_payload }
|
35
|
+
|
36
|
+
it { is_expected.to be_a IOSConfigProfile::CommandPayload }
|
37
|
+
its(:command) { should == payload }
|
38
|
+
end
|
39
|
+
|
40
|
+
describe "#require_attributes" do
|
41
|
+
it "will check for multiple attributes" do
|
42
|
+
payload.send(:require_attributes, :to_plist, :uuid)
|
43
|
+
expect { payload.send(:require_attributes, :to_plist, :asdf) }.to raise_error NoMethodError
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
describe "#require_attribute" do
|
48
|
+
it "will raise an error if the name doesn't exist" do
|
49
|
+
payload.send(:require_attribute, :to_plist)
|
50
|
+
expect { payload.send(:require_attribute, :asdf) }.to raise_error NoMethodError
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe IOSConfigProfile::CommandPayload do
|
4
|
+
subject { IOSConfigProfile::CommandPayload.new "command" }
|
5
|
+
|
6
|
+
its(:command) { should == "command" }
|
7
|
+
|
8
|
+
it "should have a payload" do
|
9
|
+
expect(subject["Command"]).to eq "command"
|
10
|
+
expect(subject["CommandUUID"]).to_not be_nil
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe IOSConfigProfile::InstallApplicationPayload do
|
4
|
+
let(:install_application_payload_attributes) do
|
5
|
+
{
|
6
|
+
"RequestType" => "InstallApplication",
|
7
|
+
"iTunesStoreID" => 265,
|
8
|
+
"ManagementFlags" => 1,
|
9
|
+
}
|
10
|
+
end
|
11
|
+
|
12
|
+
subject { IOSConfigProfile::InstallApplicationPayload.new 265 }
|
13
|
+
|
14
|
+
it { is_expected.to eq(install_application_payload_attributes) }
|
15
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe IOSConfigProfile::InstallBookPayload do
|
4
|
+
subject { IOSConfigProfile::InstallBookPayload }
|
5
|
+
|
6
|
+
describe "#initialize" do
|
7
|
+
it "has the correct payload" do
|
8
|
+
payload = subject.new("asdf")
|
9
|
+
expect(payload["RequestType"]).to eq "InstallMedia"
|
10
|
+
expect(payload["MediaType"]).to eq "Book"
|
11
|
+
expect(payload["iTunesStoreID"]).to eq "asdf"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe IOSConfigProfile::InstallDocPayload do
|
4
|
+
subject { IOSConfigProfile::InstallDocPayload }
|
5
|
+
|
6
|
+
describe "#initialize" do
|
7
|
+
it "has the correct payload" do
|
8
|
+
payload = subject.new("asdf", "qwer")
|
9
|
+
expect(payload["RequestType"]).to eq "InstallMedia"
|
10
|
+
expect(payload["MediaType"]).to eq "Book"
|
11
|
+
expect(payload["MediaURL"]).to eq "asdf"
|
12
|
+
expect(payload["Kind"]).to eq "pdf"
|
13
|
+
expect(payload["Title"]).to eq "qwer"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe IOSConfigProfile::InstallMarketAppPayload do
|
4
|
+
let(:install_market_app_payload_attributes) do
|
5
|
+
{
|
6
|
+
"RequestType" => "InstallApplication",
|
7
|
+
"ManifestURL" => "https://cellabus.com/cellabus.plist",
|
8
|
+
"ManagementFlags" => 1,
|
9
|
+
}
|
10
|
+
end
|
11
|
+
|
12
|
+
subject { IOSConfigProfile::InstallMarketAppPayload.new "https://cellabus.com/cellabus.plist" }
|
13
|
+
|
14
|
+
it { is_expected.to eq(install_market_app_payload_attributes) }
|
15
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe IOSConfigProfile::InstalledApplicationListPayload do
|
4
|
+
let(:installed_application_list_payload_attributes) do
|
5
|
+
{
|
6
|
+
"RequestType" => "InstalledApplicationList",
|
7
|
+
}
|
8
|
+
end
|
9
|
+
|
10
|
+
subject { IOSConfigProfile::InstalledApplicationListPayload.new }
|
11
|
+
|
12
|
+
it { is_expected.to eq(installed_application_list_payload_attributes) }
|
13
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe IOSConfigProfile::RemoveApplicationPayload do
|
4
|
+
subject { IOSConfigProfile::RemoveApplicationPayload }
|
5
|
+
|
6
|
+
describe "#initialize" do
|
7
|
+
it "has the correct payload" do
|
8
|
+
payload = subject.new("asdf")
|
9
|
+
expect(payload["RequestType"]).to eq "RemoveApplication"
|
10
|
+
expect(payload["Identifier"]).to eq "asdf"
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe IOSConfigProfile::RemoveBookPayload do
|
4
|
+
subject { IOSConfigProfile::RemoveBookPayload }
|
5
|
+
|
6
|
+
describe "#initialize" do
|
7
|
+
it "has the correct payload" do
|
8
|
+
payload = subject.new("asdf")
|
9
|
+
expect(payload["RequestType"]).to eq "RemoveMedia"
|
10
|
+
expect(payload["MediaType"]).to eq "Book"
|
11
|
+
expect(payload["iTunesStoreID"]).to eq "asdf"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe IOSConfigProfile::RemoveDocPayload do
|
4
|
+
subject { IOSConfigProfile::RemoveDocPayload }
|
5
|
+
|
6
|
+
describe "#initialize" do
|
7
|
+
it "must be initialized with a doc's url" do
|
8
|
+
payload = subject.new "1234"
|
9
|
+
expect(payload["PersistentID"]).to eq "com.cellabus.files.1234"
|
10
|
+
expect { subject.new nil }.to raise_error RuntimeError
|
11
|
+
end
|
12
|
+
it "has required payload values" do
|
13
|
+
payload = subject.new "1234"
|
14
|
+
expect(payload["RequestType"]).to eq "RemoveMedia"
|
15
|
+
expect(payload["MediaType"]).to eq "Book"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe IOSConfigProfile::WebClipPayload do
|
4
|
+
subject { IOSConfigProfile::WebClipPayload.new "asdf.com", "ASDF", "PNGasdf" }
|
5
|
+
|
6
|
+
it "contains valid Configuration entries" do
|
7
|
+
expect(subject["PayloadType"]).to eq "Configuration"
|
8
|
+
expect(subject["PayloadDisplayName"]).to eq "Cellabus Web Clip"
|
9
|
+
end
|
10
|
+
|
11
|
+
it "contains valid PayloadContent" do
|
12
|
+
expect(subject["PayloadContent"][0]["URL"]).to eq "asdf.com"
|
13
|
+
expect(subject["PayloadContent"][0]["Label"]).to eq "ASDF"
|
14
|
+
expect(subject["PayloadContent"][0]["Icon"].string[0, 3]).to eq "PNG"
|
15
|
+
expect(subject["PayloadContent"][0]["IsRemovable"]).to be_falsey
|
16
|
+
expect(subject["PayloadContent"][0]["PayloadType"]).to eq "com.apple.webClip.managed"
|
17
|
+
end
|
18
|
+
|
19
|
+
it "can be turned into an encrypted payload" do
|
20
|
+
expect(subject.to_encrypted_payload).to be
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe IOSConfigProfile::AppLockPayload do
|
4
|
+
subject { IOSConfigProfile::AppLockPayload }
|
5
|
+
|
6
|
+
describe "#initialize" do
|
7
|
+
it "must be initialized with an app's bundle id" do
|
8
|
+
payload = subject.new "1234"
|
9
|
+
expect(payload["PayloadContent"][0]["App"]["Identifier"]).to eq "1234"
|
10
|
+
expect { subject.new nil }.to raise_error RuntimeError
|
11
|
+
end
|
12
|
+
it "has required payload values" do
|
13
|
+
payload = subject.new "1234"
|
14
|
+
expect(payload["PayloadIdentifier"]).to eq "com.cellabusapplock.profile.mdm"
|
15
|
+
expect(payload["PayloadContent"][0]["PayloadType"]).to eq "com.apple.app.lock"
|
16
|
+
end
|
17
|
+
it "has a uuid" do
|
18
|
+
payload1 = subject.new "1234"
|
19
|
+
payload2 = subject.new "1234"
|
20
|
+
expect(payload1["PayloadUUID"]).to_not eq payload2["PayloadUUID"]
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe IOSConfigProfile::ClearPasscodePayload do
|
4
|
+
subject { IOSConfigProfile::ClearPasscodePayload }
|
5
|
+
|
6
|
+
describe "#initialize" do
|
7
|
+
it "requires an unlock token" do
|
8
|
+
token = "asdf"
|
9
|
+
payload = subject.new(token)
|
10
|
+
expect(payload["RequestType"]).to eq "ClearPasscode"
|
11
|
+
expect(payload["UnlockToken"].gets).to eq "asdf"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe IOSConfigProfile::DEPPayload do
|
4
|
+
subject { IOSConfigProfile::DEPPayload.new "https://example.com", "topic", "identity", "password" }
|
5
|
+
|
6
|
+
let(:mdm_payload) { double IOSConfigProfile::MDMPayload }
|
7
|
+
let(:security_payload) { double IOSConfigProfile::SecurityPayload }
|
8
|
+
|
9
|
+
before do
|
10
|
+
allow(IOSConfigProfile::MDMPayload).to receive(:new).and_return mdm_payload
|
11
|
+
allow(IOSConfigProfile::SecurityPayload).to receive(:new).and_return security_payload
|
12
|
+
end
|
13
|
+
|
14
|
+
it "has two payloads" do
|
15
|
+
expect(subject["PayloadContent"]).to eq([mdm_payload, security_payload])
|
16
|
+
expect(subject["PayloadType"]).to eq "Configuration"
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe IOSConfigProfile::DeviceInformationPayload do
|
4
|
+
let(:queries) do
|
5
|
+
%w[
|
6
|
+
UDID Languages Locales DeviceID OrganizationInfo iTunesStoreAccountIsActive iTunesStoreAccountHash
|
7
|
+
DeviceName OSVersion BuildVersion ModelName Model ProductName SerialNumber
|
8
|
+
DeviceCapacity AvailableDeviceCapacity BatteryLevel CellularTechnology IMEI
|
9
|
+
MEID ModemFirmwareVersion IsSupervised IsDeviceLocatorServiceEnabled
|
10
|
+
IsActivationLockEnabled IsDoNotDisturbInEffect DeviceID EASDeviceIdentifier
|
11
|
+
ICCID BluetoothMAC WiFiMAC EthernetMACs CurrentCarrierNetwork SIMCarrierNetwork
|
12
|
+
SubscriberCarrierNetwork CarrierSettingsVersion PhoneNumber VoiceRoamingEnabled
|
13
|
+
DataRoamingEnabled IsRoaming PersonalHotspotEnabled SubscriberMCC SubscriberMNC
|
14
|
+
CurrentMCC CurrentMNC
|
15
|
+
]
|
16
|
+
end
|
17
|
+
|
18
|
+
let(:device_information_payload_attributes) do
|
19
|
+
{
|
20
|
+
"Queries" => queries,
|
21
|
+
"RequestType" => "DeviceInformation",
|
22
|
+
}
|
23
|
+
end
|
24
|
+
|
25
|
+
subject { IOSConfigProfile::DeviceInformationPayload.new }
|
26
|
+
|
27
|
+
it { is_expected.to eq(device_information_payload_attributes) }
|
28
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe IOSConfigProfile::EnrollmentPayload do
|
4
|
+
subject { IOSConfigProfile::EnrollmentPayload.new "https://example.com", "topic", "identity", "password" }
|
5
|
+
|
6
|
+
let(:mdm_payload) { double IOSConfigProfile::MDMPayload }
|
7
|
+
let(:security_payload) { double IOSConfigProfile::SecurityPayload }
|
8
|
+
|
9
|
+
before do
|
10
|
+
allow(IOSConfigProfile::MDMPayload).to receive(:new).and_return mdm_payload
|
11
|
+
allow(IOSConfigProfile::SecurityPayload).to receive(:new).and_return security_payload
|
12
|
+
end
|
13
|
+
|
14
|
+
it { is_expected.to eq([security_payload, mdm_payload]) }
|
15
|
+
it "can be turned into encrypted payload" do
|
16
|
+
subject.to_encrypted_payload
|
17
|
+
end
|
18
|
+
end
|