From f0e581ebaf65bc9920fe807bcfe0b7efc8a217b7 Mon Sep 17 00:00:00 2001 From: Martin Matejovic Date: Tue, 10 Mar 2020 12:41:14 +0100 Subject: [PATCH] Sync pagination tests (#293) --- .env | 2 +- CHANGELOG.md | 2 +- Cartfile.private | 4 + Cartfile.resolved | 4 + Carthage/Checkouts/OHHTTPStubs | 2 +- Config.xcconfig | 2 +- Contentful.xcodeproj/project.pbxproj | 8 ++ Sources/Contentful/Client.swift | 22 ++-- .../SyncWithPaginationTests.json | 123 ++++++++++++++++++ Tests/ContentfulTests/SyncTests.swift | 19 ++- 10 files changed, 169 insertions(+), 19 deletions(-) create mode 100644 Tests/ContentfulTests/DVRRecordings/SyncWithPaginationTests.json diff --git a/.env b/.env index b5c9e9e4..b96e3ccf 100644 --- a/.env +++ b/.env @@ -1 +1 @@ -CONTENTFUL_SDK_VERSION=5.0.7 +CONTENTFUL_SDK_VERSION=5.0.8 diff --git a/CHANGELOG.md b/CHANGELOG.md index 610ebcdc..3a32401f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,7 +9,7 @@ This project adheres to [Semantic Versioning](http://semver.org/) starting from ## Table of contents #### 5.x Releases -- `5.0.0` Releases - [5.0.7](#507) +- `5.0.0` Releases - [5.0.7](#507) | [5.0.8](#261) #### 4.x Releases - `4.2.0` Releases - [4.2.0](#420) | [4.2.1](#421) | [4.2.2](#422) | [4.2.3](#423) | [4.2.4](#424) - `4.1.0` Releases - [4.1.0](#410) | [4.1.3](#413) diff --git a/Cartfile.private b/Cartfile.private index 4bff3227..75898a2b 100644 --- a/Cartfile.private +++ b/Cartfile.private @@ -1,2 +1,6 @@ github "venmo/DVR" ~> 1.3.2 +<<<<<<< HEAD +github "AliSoftware/OHHTTPStubs" ~> 7.0.0 +======= github "AliSoftware/OHHTTPStubs" ~> 8.0.0 +>>>>>>> master diff --git a/Cartfile.resolved b/Cartfile.resolved index 84f59e2b..c55a8c48 100644 --- a/Cartfile.resolved +++ b/Cartfile.resolved @@ -1,2 +1,6 @@ +<<<<<<< HEAD +github "AliSoftware/OHHTTPStubs" "7.0.0" +======= github "AliSoftware/OHHTTPStubs" "8.0.0" +>>>>>>> master github "venmo/DVR" "v1.3.2" diff --git a/Carthage/Checkouts/OHHTTPStubs b/Carthage/Checkouts/OHHTTPStubs index a5f9693d..54318299 160000 --- a/Carthage/Checkouts/OHHTTPStubs +++ b/Carthage/Checkouts/OHHTTPStubs @@ -1 +1 @@ -Subproject commit a5f9693dbf7a98e91cd7b72fff02bdd291ac66e0 +Subproject commit 543182991a0d59db81f5b835a40901a9a386847d diff --git a/Config.xcconfig b/Config.xcconfig index b5c9e9e4..b96e3ccf 100644 --- a/Config.xcconfig +++ b/Config.xcconfig @@ -1 +1 @@ -CONTENTFUL_SDK_VERSION=5.0.7 +CONTENTFUL_SDK_VERSION=5.0.8 diff --git a/Contentful.xcodeproj/project.pbxproj b/Contentful.xcodeproj/project.pbxproj index f0c42c1d..7053dc20 100644 --- a/Contentful.xcodeproj/project.pbxproj +++ b/Contentful.xcodeproj/project.pbxproj @@ -123,6 +123,9 @@ 5DD410EB21918E84003FC01E /* RichTextNodeDecodingTests.json in Resources */ = {isa = PBXBuildFile; fileRef = 5DD410E421918E62003FC01E /* RichTextNodeDecodingTests.json */; }; 5DFE08DB2189D6AC00B0D68E /* EntryTests.json in Resources */ = {isa = PBXBuildFile; fileRef = 5DFE08DA2189D6AC00B0D68E /* EntryTests.json */; }; 5DFE08DC2189D6AC00B0D68E /* EntryTests.json in Resources */ = {isa = PBXBuildFile; fileRef = 5DFE08DA2189D6AC00B0D68E /* EntryTests.json */; }; + 757C0AD32257D955008F91BD /* SyncWithPaginationTests.json in Resources */ = {isa = PBXBuildFile; fileRef = 757C0AD12257D94E008F91BD /* SyncWithPaginationTests.json */; }; + 757C0AD42257D955008F91BD /* SyncWithPaginationTests.json in Resources */ = {isa = PBXBuildFile; fileRef = 757C0AD12257D94E008F91BD /* SyncWithPaginationTests.json */; }; + 757C0AD52257D956008F91BD /* SyncWithPaginationTests.json in Resources */ = {isa = PBXBuildFile; fileRef = 757C0AD12257D94E008F91BD /* SyncWithPaginationTests.json */; }; A10FF9D21BBB2E5F001AA4E9 /* JSONDecodingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1B2E3661BBAD06000814D63 /* JSONDecodingTests.swift */; }; A10FF9D31BBB32FD001AA4E9 /* Asset.swift in Sources */ = {isa = PBXBuildFile; fileRef = A15193AD1BB9236300FB83CD /* Asset.swift */; }; A10FF9D51BBB3676001AA4E9 /* Error.swift in Sources */ = {isa = PBXBuildFile; fileRef = A10FF9D41BBB3676001AA4E9 /* Error.swift */; }; @@ -299,6 +302,7 @@ 5DD410462190BC8B003FC01E /* RichText.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RichText.swift; sourceTree = ""; }; 5DD410E421918E62003FC01E /* RichTextNodeDecodingTests.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = RichTextNodeDecodingTests.json; sourceTree = ""; }; 5DFE08DA2189D6AC00B0D68E /* EntryTests.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = EntryTests.json; sourceTree = ""; }; + 757C0AD12257D94E008F91BD /* SyncWithPaginationTests.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = SyncWithPaginationTests.json; sourceTree = ""; }; A10FF9D41BBB3676001AA4E9 /* Error.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = Error.swift; sourceTree = ""; }; A10FF9DB1BBB4692001AA4E9 /* Field.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = Field.swift; sourceTree = ""; }; A114BBBF1C4FD3C300DE6679 /* SyncSpace.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = SyncSpace.swift; sourceTree = ""; }; @@ -608,6 +612,7 @@ ED9102671E65AE880076FDBD /* DVRRecordings */ = { isa = PBXGroup; children = ( + 757C0AD12257D94E008F91BD /* SyncWithPaginationTests.json */, 5D73EE3821B915C60091DB67 /* LinkResolverTests.json */, 5DD410E421918E62003FC01E /* RichTextNodeDecodingTests.json */, 5DFE08DA2189D6AC00B0D68E /* EntryTests.json */, @@ -899,6 +904,7 @@ 5D73EE3B21B915C60091DB67 /* LinkResolverTests.json in Resources */, 5D52E2802193381F00C88FC9 /* testClientCantAccessPreviewAPIWithProductionToken.json in Resources */, 5D52E2812193381F00C88FC9 /* testFetchSpace.json in Resources */, + 757C0AD52257D956008F91BD /* SyncWithPaginationTests.json in Resources */, 5D52E2822193381F00C88FC9 /* Fixtures in Resources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -930,6 +936,7 @@ 5D73EE3921B915C60091DB67 /* LinkResolverTests.json in Resources */, ED02DC9F20E12405005EC57B /* Fixtures in Resources */, 5D09C24B21870C27006B83F4 /* testFetchSpace.json in Resources */, + 757C0AD32257D955008F91BD /* SyncWithPaginationTests.json in Resources */, 5D09C24521870C27006B83F4 /* ErrorTests.json in Resources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -954,6 +961,7 @@ 5D73EE3A21B915C60091DB67 /* LinkResolverTests.json in Resources */, 5D09C25E21870C27006B83F4 /* ContentTypeTests.json in Resources */, 5D09C24921870C27006B83F4 /* RateLimitTests.json in Resources */, + 757C0AD42257D955008F91BD /* SyncWithPaginationTests.json in Resources */, 5D09C24321870C27006B83F4 /* testClientCantAccessPreviewAPIWithProductionToken.json in Resources */, ); runOnlyForDeploymentPostprocessing = 0; diff --git a/Sources/Contentful/Client.swift b/Sources/Contentful/Client.swift index 5558ab56..79c7eca2 100644 --- a/Sources/Contentful/Client.swift +++ b/Sources/Contentful/Client.swift @@ -561,22 +561,20 @@ extension Client { completion(Result.error(SDKError.previewAPIDoesNotSupportSync)) return nil } - + let parameters = syncableTypes.parameters + syncSpace.parameters return fetch(url: url(endpoint: .sync, parameters: parameters)) { (result: Result) in - - var mutableResult = result - if case .success(let newSyncSpace) = result { - // On each new page, update the original sync space and forward the diffs to the - // persistence integration. + switch result { + case.success(let newSyncSpace): syncSpace.updateWithDiffs(from: newSyncSpace) self.persistenceIntegration?.update(with: newSyncSpace) - mutableResult = .success(syncSpace) - } - if let syncSpace = result.value, syncSpace.hasMorePages == true { - self.sync(for: syncSpace, syncableTypes: syncableTypes, then: completion) - } else { - completion(mutableResult) + if newSyncSpace.hasMorePages { + self.sync(for: syncSpace, syncableTypes: syncableTypes, then: completion) + } else { + completion(.success(syncSpace)) + } + case .error(let error): + completion(.error(error)) } } } diff --git a/Tests/ContentfulTests/DVRRecordings/SyncWithPaginationTests.json b/Tests/ContentfulTests/DVRRecordings/SyncWithPaginationTests.json new file mode 100644 index 00000000..0066d3e3 --- /dev/null +++ b/Tests/ContentfulTests/DVRRecordings/SyncWithPaginationTests.json @@ -0,0 +1,123 @@ +{ + "interactions" : [ + { + "response" : { + "status" : 200, + "headers" : { + "Via" : "1.1 varnish", + "Content-Length" : "2165", + "Date" : "Fri, 22 Jun 2018 12:27:55 GMT", + "access-control-allow-headers" : "Accept,Accept-Language,Authorization,Cache-Control,Content-Length,Content-Range,Content-Type,DNT,Destination,Expires,If-Match,If-Modified-Since,If-None-Match,Keep-Alive,Last-Modified,Origin,Pragma,Range,User-Agent,X-Http-Method-Override,X-Mx-ReqToken,X-Requested-With,X-Contentful-Version,X-Contentful-Content-Type,X-Contentful-Organization,X-Contentful-Skip-Transformation,X-Contentful-User-Agent,X-Contentful-Enable-Alpha-Feature", + "access-control-expose-headers" : "Etag", + "Age" : "0", + "x-cache" : "HIT", + "x-served-by" : "cache-ams4136-AMS", + "Etag" : "W\/\"c14a28273bc3b9da9e5849c254be947a\"", + "x-timer" : "S1529670475.470612,VS0,VE0", + "Accept-Ranges" : "bytes", + "Vary" : "Accept-Encoding", + "x-contentful-request-id" : "a1dc2ba328e2b04e22c0aeaf6f6e530b", + "x-content-type-options" : "nosniff", + "access-control-allow-methods" : "GET,HEAD,OPTIONS", + "Content-Type" : "application\/vnd.contentful.delivery.v1+json", + "access-control-max-age" : "86400", + "x-cache-hits" : "1", + "Access-Control-Allow-Origin" : "*", + "Server" : "Contentful", + "Content-Encoding" : "gzip", + "Cache-Control" : "max-age=0" + }, + "body" : "ew0KICAic3lzIjogew0KICAgICJ0eXBlIjogIkFycmF5Ig0KICB9LA0KICAiaXRlbXMiOiBbDQogICAgew0KICAgICAgInN5cyI6IHsNCiAgICAgICAgInNwYWNlIjogew0KICAgICAgICAgICJzeXMiOiB7DQogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwNCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJTcGFjZSIsDQogICAgICAgICAgICAiaWQiOiAiZHVtcmkzZWJrbm9uIg0KICAgICAgICAgIH0NCiAgICAgICAgfSwNCiAgICAgICAgImlkIjogIkdsdWo5bHpxdVljSzBhZ29Da01VcyIsDQogICAgICAgICJ0eXBlIjogIkFzc2V0IiwNCiAgICAgICAgImNyZWF0ZWRBdCI6ICIyMDE4LTA0LTAyVDA5OjM2OjE5LjA2NFoiLA0KICAgICAgICAidXBkYXRlZEF0IjogIjIwMTgtMDQtMDJUMDk6MzY6MTkuMDY0WiIsDQogICAgICAgICJlbnZpcm9ubWVudCI6IHsNCiAgICAgICAgICAic3lzIjogew0KICAgICAgICAgICAgImlkIjogIm1hc3RlciIsDQogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwNCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJFbnZpcm9ubWVudCINCiAgICAgICAgICB9DQogICAgICAgIH0sDQogICAgICAgICJyZXZpc2lvbiI6IDENCiAgICAgIH0sDQogICAgICAiZmllbGRzIjogew0KICAgICAgICAidGl0bGUiOiB7DQogICAgICAgICAgImVuLVVTIjogIlZpZGVvIGNhdCINCiAgICAgICAgfSwNCiAgICAgICAgImRlc2NyaXB0aW9uIjogew0KICAgICAgICAgICJlbi1VUyI6ICJUaGUgb25seSB2aWRlbyINCiAgICAgICAgfSwNCiAgICAgICAgImZpbGUiOiB7DQogICAgICAgICAgImVuLVVTIjogew0KICAgICAgICAgICAgInVybCI6ICIvL3ZpZGVvcy5jdGZhc3NldHMubmV0L2R1bXJpM2Via25vbi9HbHVqOWx6cXVZY0swYWdvQ2tNVXMvMTEwNGZmZmVmYTA5ODA2MmZkOWY4ODhhMGE1NzFlZGQvQ3V0ZV9DYXRfLV8zMDkyLm1wNCIsDQogICAgICAgICAgICAiZGV0YWlscyI6IHsNCiAgICAgICAgICAgICAgInNpemUiOiA3MTg3NTEyDQogICAgICAgICAgICB9LA0KICAgICAgICAgICAgImZpbGVOYW1lIjogIkN1dGUgQ2F0IC0gMzA5Mi5tcDQiLA0KICAgICAgICAgICAgImNvbnRlbnRUeXBlIjogInZpZGVvL21wNCINCiAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIH0NCiAgICB9LA0KICAgIHsNCiAgICAgICJzeXMiOiB7DQogICAgICAgICJzcGFjZSI6IHsNCiAgICAgICAgICAic3lzIjogew0KICAgICAgICAgICAgInR5cGUiOiAiTGluayIsDQogICAgICAgICAgICAibGlua1R5cGUiOiAiU3BhY2UiLA0KICAgICAgICAgICAgImlkIjogImR1bXJpM2Via25vbiINCiAgICAgICAgICB9DQogICAgICAgIH0sDQogICAgICAgICJpZCI6ICJnYXJmaWVsZCIsDQogICAgICAgICJ0eXBlIjogIkVudHJ5IiwNCiAgICAgICAgImNyZWF0ZWRBdCI6ICIyMDE4LTAyLTI4VDE0OjA1OjIzLjI4MFoiLA0KICAgICAgICAidXBkYXRlZEF0IjogIjIwMTgtMDItMjhUMTQ6MDU6MjMuMjgwWiIsDQogICAgICAgICJlbnZpcm9ubWVudCI6IHsNCiAgICAgICAgICAic3lzIjogew0KICAgICAgICAgICAgImlkIjogIm1hc3RlciIsDQogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwNCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJFbnZpcm9ubWVudCINCiAgICAgICAgICB9DQogICAgICAgIH0sDQogICAgICAgICJyZXZpc2lvbiI6IDEsDQogICAgICAgICJjb250ZW50VHlwZSI6IHsNCiAgICAgICAgICAic3lzIjogew0KICAgICAgICAgICAgInR5cGUiOiAiTGluayIsDQogICAgICAgICAgICAibGlua1R5cGUiOiAiQ29udGVudFR5cGUiLA0KICAgICAgICAgICAgImlkIjogImNhdCINCiAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIH0sDQogICAgICAiZmllbGRzIjogew0KICAgICAgICAibmFtZSI6IHsNCiAgICAgICAgICAiZW4tVVMiOiAiR2FyZmllbGQiLA0KICAgICAgICAgICJ0bGgiOiAiR2FyZmllbGQiDQogICAgICAgIH0sDQogICAgICAgICJsaWtlcyI6IHsNCiAgICAgICAgICAiZW4tVVMiOiBbDQogICAgICAgICAgICAibGFzYWduYSINCiAgICAgICAgICBdDQogICAgICAgIH0sDQogICAgICAgICJjb2xvciI6IHsNCiAgICAgICAgICAiZW4tVVMiOiAib3JhbmdlIg0KICAgICAgICB9LA0KICAgICAgICAiYmlydGhkYXkiOiB7DQogICAgICAgICAgImVuLVVTIjogIjE5NzktMDYtMThUMjM6MDA6MDArMDA6MDAiDQogICAgICAgIH0sDQogICAgICAgICJsaWZlcyI6IHsNCiAgICAgICAgICAiZW4tVVMiOiBudWxsDQogICAgICAgIH0sDQogICAgICAgICJsaXZlcyI6IHsNCiAgICAgICAgICAiZW4tVVMiOiA5DQogICAgICAgIH0NCiAgICAgIH0NCiAgICB9LA0KICAgIHsNCiAgICAgICJzeXMiOiB7DQogICAgICAgICJzcGFjZSI6IHsNCiAgICAgICAgICAic3lzIjogew0KICAgICAgICAgICAgInR5cGUiOiAiTGluayIsDQogICAgICAgICAgICAibGlua1R5cGUiOiAiU3BhY2UiLA0KICAgICAgICAgICAgImlkIjogImR1bXJpM2Via25vbiINCiAgICAgICAgICB9DQogICAgICAgIH0sDQogICAgICAgICJpZCI6ICI0TVUxczNwb3RpVUVNMkc0b2tZT3F3IiwNCiAgICAgICAgInR5cGUiOiAiRW50cnkiLA0KICAgICAgICAiY3JlYXRlZEF0IjogIjIwMTgtMDItMjhUMTQ6MDU6MjIuMDgwWiIsDQogICAgICAgICJ1cGRhdGVkQXQiOiAiMjAxOC0wMi0yOFQxNDowNToyMi4wODBaIiwNCiAgICAgICAgImVudmlyb25tZW50Ijogew0KICAgICAgICAgICJzeXMiOiB7DQogICAgICAgICAgICAiaWQiOiAibWFzdGVyIiwNCiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLA0KICAgICAgICAgICAgImxpbmtUeXBlIjogIkVudmlyb25tZW50Ig0KICAgICAgICAgIH0NCiAgICAgICAgfSwNCiAgICAgICAgInJldmlzaW9uIjogMSwNCiAgICAgICAgImNvbnRlbnRUeXBlIjogew0KICAgICAgICAgICJzeXMiOiB7DQogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwNCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJDb250ZW50VHlwZSIsDQogICAgICAgICAgICAiaWQiOiAiMXQ5SWJjZmRDazZtMDR1SVNTc2FJSyINCiAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIH0sDQogICAgICAiZmllbGRzIjogew0KICAgICAgICAibmFtZSI6IHsNCiAgICAgICAgICAiZW4tVVMiOiAiQmVybGluIg0KICAgICAgICB9LA0KICAgICAgICAiY2VudGVyIjogew0KICAgICAgICAgICJlbi1VUyI6IHsNCiAgICAgICAgICAgICJsb24iOiAxMy40MDQ5NTM5OTk5OTk5NzUsDQogICAgICAgICAgICAibGF0IjogNTIuNTIwMDA2NTk5OTk5OTkNCiAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIH0NCiAgICB9LA0KICAgIHsNCiAgICAgICJzeXMiOiB7DQogICAgICAgICJzcGFjZSI6IHsNCiAgICAgICAgICAic3lzIjogew0KICAgICAgICAgICAgInR5cGUiOiAiTGluayIsDQogICAgICAgICAgICAibGlua1R5cGUiOiAiU3BhY2UiLA0KICAgICAgICAgICAgImlkIjogImR1bXJpM2Via25vbiINCiAgICAgICAgICB9DQogICAgICAgIH0sDQogICAgICAgICJpZCI6ICI2S250YVlYYUhTeUl3OE02ZW8yNk9LIiwNCiAgICAgICAgInR5cGUiOiAiRW50cnkiLA0KICAgICAgICAiY3JlYXRlZEF0IjogIjIwMTgtMDItMjhUMTQ6MDU6MjAuOTA4WiIsDQogICAgICAgICJ1cGRhdGVkQXQiOiAiMjAxOC0wMi0yOFQxNDowNToyMC45MDhaIiwNCiAgICAgICAgImVudmlyb25tZW50Ijogew0KICAgICAgICAgICJzeXMiOiB7DQogICAgICAgICAgICAiaWQiOiAibWFzdGVyIiwNCiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLA0KICAgICAgICAgICAgImxpbmtUeXBlIjogIkVudmlyb25tZW50Ig0KICAgICAgICAgIH0NCiAgICAgICAgfSwNCiAgICAgICAgInJldmlzaW9uIjogMSwNCiAgICAgICAgImNvbnRlbnRUeXBlIjogew0KICAgICAgICAgICJzeXMiOiB7DQogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwNCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJDb250ZW50VHlwZSIsDQogICAgICAgICAgICAiaWQiOiAiZG9nIg0KICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgfSwNCiAgICAgICJmaWVsZHMiOiB7DQogICAgICAgICJuYW1lIjogew0KICAgICAgICAgICJlbi1VUyI6ICJEb2dlIg0KICAgICAgICB9LA0KICAgICAgICAiZGVzY3JpcHRpb24iOiB7DQogICAgICAgICAgImVuLVVTIjogInN1Y2gganNvblxud293Ig0KICAgICAgICB9LA0KICAgICAgICAiaW1hZ2UiOiB7DQogICAgICAgICAgImVuLVVTIjogew0KICAgICAgICAgICAgInN5cyI6IHsNCiAgICAgICAgICAgICAgInR5cGUiOiAiTGluayIsDQogICAgICAgICAgICAgICJsaW5rVHlwZSI6ICJBc3NldCIsDQogICAgICAgICAgICAgICJpZCI6ICIxeDB4cFh1NHBTR1M0T3VrU3lXR1VLIg0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgfQ0KICAgIH0sDQogICAgew0KICAgICAgInN5cyI6IHsNCiAgICAgICAgInNwYWNlIjogew0KICAgICAgICAgICJzeXMiOiB7DQogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwNCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJTcGFjZSIsDQogICAgICAgICAgICAiaWQiOiAiZHVtcmkzZWJrbm9uIg0KICAgICAgICAgIH0NCiAgICAgICAgfSwNCiAgICAgICAgImlkIjogIjVFVE1SemtsOUtNNG9teU13S0FPa2kiLA0KICAgICAgICAidHlwZSI6ICJFbnRyeSIsDQogICAgICAgICJjcmVhdGVkQXQiOiAiMjAxOC0wMi0yOFQxNDowNToxOS42MzFaIiwNCiAgICAgICAgInVwZGF0ZWRBdCI6ICIyMDE4LTAyLTI4VDE0OjA1OjE5LjYzMVoiLA0KICAgICAgICAiZW52aXJvbm1lbnQiOiB7DQogICAgICAgICAgInN5cyI6IHsNCiAgICAgICAgICAgICJpZCI6ICJtYXN0ZXIiLA0KICAgICAgICAgICAgInR5cGUiOiAiTGluayIsDQogICAgICAgICAgICAibGlua1R5cGUiOiAiRW52aXJvbm1lbnQiDQogICAgICAgICAgfQ0KICAgICAgICB9LA0KICAgICAgICAicmV2aXNpb24iOiAxLA0KICAgICAgICAiY29udGVudFR5cGUiOiB7DQogICAgICAgICAgInN5cyI6IHsNCiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLA0KICAgICAgICAgICAgImxpbmtUeXBlIjogIkNvbnRlbnRUeXBlIiwNCiAgICAgICAgICAgICJpZCI6ICIxdDlJYmNmZENrNm0wNHVJU1NzYUlLIg0KICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgfSwNCiAgICAgICJmaWVsZHMiOiB7DQogICAgICAgICJuYW1lIjogew0KICAgICAgICAgICJlbi1VUyI6ICJMb25kb24iDQogICAgICAgIH0sDQogICAgICAgICJjZW50ZXIiOiB7DQogICAgICAgICAgImVuLVVTIjogew0KICAgICAgICAgICAgImxvbiI6IC0wLjEyNTQ4NzE5OTk5OTk1MjI4LA0KICAgICAgICAgICAgImxhdCI6IDUxLjUwODUxNQ0KICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgfQ0KICAgIH0sDQogICAgew0KICAgICAgInN5cyI6IHsNCiAgICAgICAgInNwYWNlIjogew0KICAgICAgICAgICJzeXMiOiB7DQogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwNCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJTcGFjZSIsDQogICAgICAgICAgICAiaWQiOiAiZHVtcmkzZWJrbm9uIg0KICAgICAgICAgIH0NCiAgICAgICAgfSwNCiAgICAgICAgImlkIjogImpha2UiLA0KICAgICAgICAidHlwZSI6ICJFbnRyeSIsDQogICAgICAgICJjcmVhdGVkQXQiOiAiMjAxOC0wMi0yOFQxNDowNToxOC4zNzZaIiwNCiAgICAgICAgInVwZGF0ZWRBdCI6ICIyMDE4LTAyLTI4VDE0OjA1OjE4LjM3NloiLA0KICAgICAgICAiZW52aXJvbm1lbnQiOiB7DQogICAgICAgICAgInN5cyI6IHsNCiAgICAgICAgICAgICJpZCI6ICJtYXN0ZXIiLA0KICAgICAgICAgICAgInR5cGUiOiAiTGluayIsDQogICAgICAgICAgICAibGlua1R5cGUiOiAiRW52aXJvbm1lbnQiDQogICAgICAgICAgfQ0KICAgICAgICB9LA0KICAgICAgICAicmV2aXNpb24iOiAxLA0KICAgICAgICAiY29udGVudFR5cGUiOiB7DQogICAgICAgICAgInN5cyI6IHsNCiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLA0KICAgICAgICAgICAgImxpbmtUeXBlIjogIkNvbnRlbnRUeXBlIiwNCiAgICAgICAgICAgICJpZCI6ICJkb2ciDQogICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICB9LA0KICAgICAgImZpZWxkcyI6IHsNCiAgICAgICAgIm5hbWUiOiB7DQogICAgICAgICAgImVuLVVTIjogIkpha2UiDQogICAgICAgIH0sDQogICAgICAgICJkZXNjcmlwdGlvbiI6IHsNCiAgICAgICAgICAiZW4tVVMiOiAiQmFjb24gcGFuY2FrZXMsIG1ha2luJyBiYWNvbiBwYW5jYWtlcyEiDQogICAgICAgIH0sDQogICAgICAgICJpbWFnZSI6IHsNCiAgICAgICAgICAiZW4tVVMiOiB7DQogICAgICAgICAgICAic3lzIjogew0KICAgICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwNCiAgICAgICAgICAgICAgImxpbmtUeXBlIjogIkFzc2V0IiwNCiAgICAgICAgICAgICAgImlkIjogImpha2UiDQogICAgICAgICAgICB9DQogICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICB9DQogICAgfSwNCiAgICB7DQogICAgICAic3lzIjogew0KICAgICAgICAic3BhY2UiOiB7DQogICAgICAgICAgInN5cyI6IHsNCiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLA0KICAgICAgICAgICAgImxpbmtUeXBlIjogIlNwYWNlIiwNCiAgICAgICAgICAgICJpZCI6ICJkdW1yaTNlYmtub24iDQogICAgICAgICAgfQ0KICAgICAgICB9LA0KICAgICAgICAiaWQiOiAiN3FWQmxDanBXRTg2T3NlbzQwZ0FFWSIsDQogICAgICAgICJ0eXBlIjogIkVudHJ5IiwNCiAgICAgICAgImNyZWF0ZWRBdCI6ICIyMDE4LTAyLTI4VDE0OjA1OjE3LjIwOFoiLA0KICAgICAgICAidXBkYXRlZEF0IjogIjIwMTgtMDItMjhUMTQ6MDU6MTcuMjA4WiIsDQogICAgICAgICJlbnZpcm9ubWVudCI6IHsNCiAgICAgICAgICAic3lzIjogew0KICAgICAgICAgICAgImlkIjogIm1hc3RlciIsDQogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwNCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJFbnZpcm9ubWVudCINCiAgICAgICAgICB9DQogICAgICAgIH0sDQogICAgICAgICJyZXZpc2lvbiI6IDEsDQogICAgICAgICJjb250ZW50VHlwZSI6IHsNCiAgICAgICAgICAic3lzIjogew0KICAgICAgICAgICAgInR5cGUiOiAiTGluayIsDQogICAgICAgICAgICAibGlua1R5cGUiOiAiQ29udGVudFR5cGUiLA0KICAgICAgICAgICAgImlkIjogIjF0OUliY2ZkQ2s2bTA0dUlTU3NhSUsiDQogICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICB9LA0KICAgICAgImZpZWxkcyI6IHsNCiAgICAgICAgIm5hbWUiOiB7DQogICAgICAgICAgImVuLVVTIjogIlNhbiBGcmFuY2lzY28iDQogICAgICAgIH0sDQogICAgICAgICJjZW50ZXIiOiB7DQogICAgICAgICAgImVuLVVTIjogew0KICAgICAgICAgICAgImxvbiI6IC0xMjIuNDE5NDE1NTAwMDAwMDEsDQogICAgICAgICAgICAibGF0IjogMzcuNzc0OTI5NQ0KICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgfQ0KICAgIH0sDQogICAgew0KICAgICAgInN5cyI6IHsNCiAgICAgICAgInNwYWNlIjogew0KICAgICAgICAgICJzeXMiOiB7DQogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwNCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJTcGFjZSIsDQogICAgICAgICAgICAiaWQiOiAiZHVtcmkzZWJrbm9uIg0KICAgICAgICAgIH0NCiAgICAgICAgfSwNCiAgICAgICAgImlkIjogIm55YW5jYXQiLA0KICAgICAgICAidHlwZSI6ICJFbnRyeSIsDQogICAgICAgICJjcmVhdGVkQXQiOiAiMjAxOC0wMi0yOFQxNDowNToxNS45NTVaIiwNCiAgICAgICAgInVwZGF0ZWRBdCI6ICIyMDE4LTAyLTI4VDE0OjA1OjE1Ljk1NVoiLA0KICAgICAgICAiZW52aXJvbm1lbnQiOiB7DQogICAgICAgICAgInN5cyI6IHsNCiAgICAgICAgICAgICJpZCI6ICJtYXN0ZXIiLA0KICAgICAgICAgICAgInR5cGUiOiAiTGluayIsDQogICAgICAgICAgICAibGlua1R5cGUiOiAiRW52aXJvbm1lbnQiDQogICAgICAgICAgfQ0KICAgICAgICB9LA0KICAgICAgICAicmV2aXNpb24iOiAxLA0KICAgICAgICAiY29udGVudFR5cGUiOiB7DQogICAgICAgICAgInN5cyI6IHsNCiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLA0KICAgICAgICAgICAgImxpbmtUeXBlIjogIkNvbnRlbnRUeXBlIiwNCiAgICAgICAgICAgICJpZCI6ICJjYXQiDQogICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICB9LA0KICAgICAgImZpZWxkcyI6IHsNCiAgICAgICAgIm5hbWUiOiB7DQogICAgICAgICAgImVuLVVTIjogIk55YW4gQ2F0IiwNCiAgICAgICAgICAidGxoIjogIk55YW4gdklnaHJvJyINCiAgICAgICAgfSwNCiAgICAgICAgImxpa2VzIjogew0KICAgICAgICAgICJlbi1VUyI6IFsNCiAgICAgICAgICAgICJyYWluYm93cyIsDQogICAgICAgICAgICAiZmlzaCINCiAgICAgICAgICBdDQogICAgICAgIH0sDQogICAgICAgICJjb2xvciI6IHsNCiAgICAgICAgICAiZW4tVVMiOiAicmFpbmJvdyINCiAgICAgICAgfSwNCiAgICAgICAgImJlc3RGcmllbmQiOiB7DQogICAgICAgICAgImVuLVVTIjogew0KICAgICAgICAgICAgInN5cyI6IHsNCiAgICAgICAgICAgICAgInR5cGUiOiAiTGluayIsDQogICAgICAgICAgICAgICJsaW5rVHlwZSI6ICJFbnRyeSIsDQogICAgICAgICAgICAgICJpZCI6ICJoYXBweWNhdCINCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9DQogICAgICAgIH0sDQogICAgICAgICJiaXJ0aGRheSI6IHsNCiAgICAgICAgICAiZW4tVVMiOiAiMjAxMS0wNC0wNFQyMjowMCswMDowMCINCiAgICAgICAgfSwNCiAgICAgICAgImxpdmVzIjogew0KICAgICAgICAgICJlbi1VUyI6IDEzMzcNCiAgICAgICAgfSwNCiAgICAgICAgImltYWdlIjogew0KICAgICAgICAgICJlbi1VUyI6IHsNCiAgICAgICAgICAgICJzeXMiOiB7DQogICAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLA0KICAgICAgICAgICAgICAibGlua1R5cGUiOiAiQXNzZXQiLA0KICAgICAgICAgICAgICAiaWQiOiAibnlhbmNhdCINCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIH0NCiAgICB9LA0KICAgIHsNCiAgICAgICJzeXMiOiB7DQogICAgICAgICJzcGFjZSI6IHsNCiAgICAgICAgICAic3lzIjogew0KICAgICAgICAgICAgInR5cGUiOiAiTGluayIsDQogICAgICAgICAgICAibGlua1R5cGUiOiAiU3BhY2UiLA0KICAgICAgICAgICAgImlkIjogImR1bXJpM2Via25vbiINCiAgICAgICAgICB9DQogICAgICAgIH0sDQogICAgICAgICJpZCI6ICJnZTF4SHlIM1FPV3VjS1dDQ0FnSUciLA0KICAgICAgICAidHlwZSI6ICJFbnRyeSIsDQogICAgICAgICJjcmVhdGVkQXQiOiAiMjAxOC0wMi0yOFQxNDowNToxNC43NzRaIiwNCiAgICAgICAgInVwZGF0ZWRBdCI6ICIyMDE4LTAyLTI4VDE0OjA1OjE0Ljc3NFoiLA0KICAgICAgICAiZW52aXJvbm1lbnQiOiB7DQogICAgICAgICAgInN5cyI6IHsNCiAgICAgICAgICAgICJpZCI6ICJtYXN0ZXIiLA0KICAgICAgICAgICAgInR5cGUiOiAiTGluayIsDQogICAgICAgICAgICAibGlua1R5cGUiOiAiRW52aXJvbm1lbnQiDQogICAgICAgICAgfQ0KICAgICAgICB9LA0KICAgICAgICAicmV2aXNpb24iOiAxLA0KICAgICAgICAiY29udGVudFR5cGUiOiB7DQogICAgICAgICAgInN5cyI6IHsNCiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLA0KICAgICAgICAgICAgImxpbmtUeXBlIjogIkNvbnRlbnRUeXBlIiwNCiAgICAgICAgICAgICJpZCI6ICIxdDlJYmNmZENrNm0wNHVJU1NzYUlLIg0KICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgfSwNCiAgICAgICJmaWVsZHMiOiB7DQogICAgICAgICJuYW1lIjogew0KICAgICAgICAgICJlbi1VUyI6ICJQYXJpcyINCiAgICAgICAgfSwNCiAgICAgICAgImNlbnRlciI6IHsNCiAgICAgICAgICAiZW4tVVMiOiB7DQogICAgICAgICAgICAibG9uIjogMi4zNTIyMjE5MDAwMDAwMTc3LA0KICAgICAgICAgICAgImxhdCI6IDQ4Ljg1NjYxNA0KICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgfQ0KICAgIH0sDQogICAgew0KICAgICAgInN5cyI6IHsNCiAgICAgICAgInNwYWNlIjogew0KICAgICAgICAgICJzeXMiOiB7DQogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwNCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJTcGFjZSIsDQogICAgICAgICAgICAiaWQiOiAiZHVtcmkzZWJrbm9uIg0KICAgICAgICAgIH0NCiAgICAgICAgfSwNCiAgICAgICAgImlkIjogImhhcHB5Y2F0IiwNCiAgICAgICAgInR5cGUiOiAiRW50cnkiLA0KICAgICAgICAiY3JlYXRlZEF0IjogIjIwMTgtMDItMjhUMTQ6MDU6MTMuNDgzWiIsDQogICAgICAgICJ1cGRhdGVkQXQiOiAiMjAxOC0wMi0yOFQxNDowNToxMy40ODNaIiwNCiAgICAgICAgImVudmlyb25tZW50Ijogew0KICAgICAgICAgICJzeXMiOiB7DQogICAgICAgICAgICAiaWQiOiAibWFzdGVyIiwNCiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLA0KICAgICAgICAgICAgImxpbmtUeXBlIjogIkVudmlyb25tZW50Ig0KICAgICAgICAgIH0NCiAgICAgICAgfSwNCiAgICAgICAgInJldmlzaW9uIjogMSwNCiAgICAgICAgImNvbnRlbnRUeXBlIjogew0KICAgICAgICAgICJzeXMiOiB7DQogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwNCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJDb250ZW50VHlwZSIsDQogICAgICAgICAgICAiaWQiOiAiY2F0Ig0KICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgfSwNCiAgICAgICJmaWVsZHMiOiB7DQogICAgICAgICJuYW1lIjogew0KICAgICAgICAgICJlbi1VUyI6ICJIYXBweSBDYXQiLA0KICAgICAgICAgICJ0bGgiOiAiUXVjaCB2SWdocm8nIg0KICAgICAgICB9LA0KICAgICAgICAibGlrZXMiOiB7DQogICAgICAgICAgImVuLVVTIjogWw0KICAgICAgICAgICAgImNoZWV6YnVyZ2VyIg0KICAgICAgICAgIF0NCiAgICAgICAgfSwNCiAgICAgICAgImNvbG9yIjogew0KICAgICAgICAgICJlbi1VUyI6ICJncmF5Ig0KICAgICAgICB9LA0KICAgICAgICAiYmVzdEZyaWVuZCI6IHsNCiAgICAgICAgICAiZW4tVVMiOiB7DQogICAgICAgICAgICAic3lzIjogew0KICAgICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwNCiAgICAgICAgICAgICAgImxpbmtUeXBlIjogIkVudHJ5IiwNCiAgICAgICAgICAgICAgImlkIjogIm55YW5jYXQiDQogICAgICAgICAgICB9DQogICAgICAgICAgfQ0KICAgICAgICB9LA0KICAgICAgICAiYmlydGhkYXkiOiB7DQogICAgICAgICAgImVuLVVTIjogIjIwMDMtMTAtMjhUMjM6MDA6MDArMDA6MDAiDQogICAgICAgIH0sDQogICAgICAgICJsaXZlcyI6IHsNCiAgICAgICAgICAiZW4tVVMiOiAxDQogICAgICAgIH0sDQogICAgICAgICJpbWFnZSI6IHsNCiAgICAgICAgICAiZW4tVVMiOiB7DQogICAgICAgICAgICAic3lzIjogew0KICAgICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwNCiAgICAgICAgICAgICAgImxpbmtUeXBlIjogIkFzc2V0IiwNCiAgICAgICAgICAgICAgImlkIjogImhhcHB5Y2F0Ig0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgfQ0KICAgIH0sDQogICAgew0KICAgICAgInN5cyI6IHsNCiAgICAgICAgInNwYWNlIjogew0KICAgICAgICAgICJzeXMiOiB7DQogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwNCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJTcGFjZSIsDQogICAgICAgICAgICAiaWQiOiAiZHVtcmkzZWJrbm9uIg0KICAgICAgICAgIH0NCiAgICAgICAgfSwNCiAgICAgICAgImlkIjogImZpbm4iLA0KICAgICAgICAidHlwZSI6ICJFbnRyeSIsDQogICAgICAgICJjcmVhdGVkQXQiOiAiMjAxOC0wMi0yOFQxNDowNToxMi4xMjBaIiwNCiAgICAgICAgInVwZGF0ZWRBdCI6ICIyMDE4LTAyLTI4VDE0OjA1OjEyLjEyMFoiLA0KICAgICAgICAiZW52aXJvbm1lbnQiOiB7DQogICAgICAgICAgInN5cyI6IHsNCiAgICAgICAgICAgICJpZCI6ICJtYXN0ZXIiLA0KICAgICAgICAgICAgInR5cGUiOiAiTGluayIsDQogICAgICAgICAgICAibGlua1R5cGUiOiAiRW52aXJvbm1lbnQiDQogICAgICAgICAgfQ0KICAgICAgICB9LA0KICAgICAgICAicmV2aXNpb24iOiAxLA0KICAgICAgICAiY29udGVudFR5cGUiOiB7DQogICAgICAgICAgInN5cyI6IHsNCiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLA0KICAgICAgICAgICAgImxpbmtUeXBlIjogIkNvbnRlbnRUeXBlIiwNCiAgICAgICAgICAgICJpZCI6ICJodW1hbiINCiAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIH0sDQogICAgICAiZmllbGRzIjogew0KICAgICAgICAibmFtZSI6IHsNCiAgICAgICAgICAiZW4tVVMiOiAiRmlubiINCiAgICAgICAgfSwNCiAgICAgICAgImRlc2NyaXB0aW9uIjogew0KICAgICAgICAgICJlbi1VUyI6ICJGZWFybGVzcyBhZHZlbnR1cmVyISBEZWZlbmRlciBvZiBwYW5jYWtlcy4iDQogICAgICAgIH0sDQogICAgICAgICJsaWtlcyI6IHsNCiAgICAgICAgICAiZW4tVVMiOiBbDQogICAgICAgICAgICAiYWR2ZW50dXJlIg0KICAgICAgICAgIF0NCiAgICAgICAgfQ0KICAgICAgfQ0KICAgIH0sDQogICAgew0KICAgICAgInN5cyI6IHsNCiAgICAgICAgInNwYWNlIjogew0KICAgICAgICAgICJzeXMiOiB7DQogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwNCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJTcGFjZSIsDQogICAgICAgICAgICAiaWQiOiAiZHVtcmkzZWJrbm9uIg0KICAgICAgICAgIH0NCiAgICAgICAgfSwNCiAgICAgICAgImlkIjogIjF4MHhwWHU0cFNHUzRPdWtTeVdHVUsiLA0KICAgICAgICAidHlwZSI6ICJBc3NldCIsDQogICAgICAgICJjcmVhdGVkQXQiOiAiMjAxOC0wMi0yOFQxNDowNTowOC44NTNaIiwNCiAgICAgICAgInVwZGF0ZWRBdCI6ICIyMDE4LTAyLTI4VDE0OjA1OjA4Ljg1M1oiLA0KICAgICAgICAiZW52aXJvbm1lbnQiOiB7DQogICAgICAgICAgInN5cyI6IHsNCiAgICAgICAgICAgICJpZCI6ICJtYXN0ZXIiLA0KICAgICAgICAgICAgInR5cGUiOiAiTGluayIsDQogICAgICAgICAgICAibGlua1R5cGUiOiAiRW52aXJvbm1lbnQiDQogICAgICAgICAgfQ0KICAgICAgICB9LA0KICAgICAgICAicmV2aXNpb24iOiAxDQogICAgICB9LA0KICAgICAgImZpZWxkcyI6IHsNCiAgICAgICAgInRpdGxlIjogew0KICAgICAgICAgICJlbi1VUyI6ICJkb2dlIg0KICAgICAgICB9LA0KICAgICAgICAiZmlsZSI6IHsNCiAgICAgICAgICAiZW4tVVMiOiB7DQogICAgICAgICAgICAidXJsIjogIi8vaW1hZ2VzLmN0ZmFzc2V0cy5uZXQvZHVtcmkzZWJrbm9uLzF4MHhwWHU0cFNHUzRPdWtTeVdHVUsvNTY5Zjc3OWRjNzE3YTdkNzY3OThhNzgzNzhhZjk5MGQvZG9nZS5qcGciLA0KICAgICAgICAgICAgImRldGFpbHMiOiB7DQogICAgICAgICAgICAgICJzaXplIjogNTIyOTQzLA0KICAgICAgICAgICAgICAiaW1hZ2UiOiB7DQogICAgICAgICAgICAgICAgIndpZHRoIjogNTgwMCwNCiAgICAgICAgICAgICAgICAiaGVpZ2h0IjogNDM1MA0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9LA0KICAgICAgICAgICAgImZpbGVOYW1lIjogImRvZ2UuanBnIiwNCiAgICAgICAgICAgICJjb250ZW50VHlwZSI6ICJpbWFnZS9qcGVnIg0KICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgfQ0KICAgIH0sDQogICAgew0KICAgICAgInN5cyI6IHsNCiAgICAgICAgInNwYWNlIjogew0KICAgICAgICAgICJzeXMiOiB7DQogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwNCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJTcGFjZSIsDQogICAgICAgICAgICAiaWQiOiAiZHVtcmkzZWJrbm9uIg0KICAgICAgICAgIH0NCiAgICAgICAgfSwNCiAgICAgICAgImlkIjogImpha2UiLA0KICAgICAgICAidHlwZSI6ICJBc3NldCIsDQogICAgICAgICJjcmVhdGVkQXQiOiAiMjAxOC0wMi0yOFQxNDowNTowNy43OTJaIiwNCiAgICAgICAgInVwZGF0ZWRBdCI6ICIyMDE4LTAyLTI4VDE0OjA1OjA3Ljc5MloiLA0KICAgICAgICAiZW52aXJvbm1lbnQiOiB7DQogICAgICAgICAgInN5cyI6IHsNCiAgICAgICAgICAgICJpZCI6ICJtYXN0ZXIiLA0KICAgICAgICAgICAgInR5cGUiOiAiTGluayIsDQogICAgICAgICAgICAibGlua1R5cGUiOiAiRW52aXJvbm1lbnQiDQogICAgICAgICAgfQ0KICAgICAgICB9LA0KICAgICAgICAicmV2aXNpb24iOiAxDQogICAgICB9LA0KICAgICAgImZpZWxkcyI6IHsNCiAgICAgICAgInRpdGxlIjogew0KICAgICAgICAgICJlbi1VUyI6ICJqYWtlIg0KICAgICAgICB9LA0KICAgICAgICAiZmlsZSI6IHsNCiAgICAgICAgICAiZW4tVVMiOiB7DQogICAgICAgICAgICAidXJsIjogIi8vaW1hZ2VzLmN0ZmFzc2V0cy5uZXQvZHVtcmkzZWJrbm9uL2pha2UvNThiMzE3NWE1YTdhMGMzYjdjNGMwOWMzNzBlOGExOWYvamFrZS5wbmciLA0KICAgICAgICAgICAgImRldGFpbHMiOiB7DQogICAgICAgICAgICAgICJzaXplIjogMjA0ODAsDQogICAgICAgICAgICAgICJpbWFnZSI6IHsNCiAgICAgICAgICAgICAgICAid2lkdGgiOiAxMDAsDQogICAgICAgICAgICAgICAgImhlaWdodCI6IDE2MQ0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9LA0KICAgICAgICAgICAgImZpbGVOYW1lIjogImpha2UucG5nIiwNCiAgICAgICAgICAgICJjb250ZW50VHlwZSI6ICJpbWFnZS9wbmciDQogICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICB9DQogICAgfSwNCiAgICB7DQogICAgICAic3lzIjogew0KICAgICAgICAic3BhY2UiOiB7DQogICAgICAgICAgInN5cyI6IHsNCiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLA0KICAgICAgICAgICAgImxpbmtUeXBlIjogIlNwYWNlIiwNCiAgICAgICAgICAgICJpZCI6ICJkdW1yaTNlYmtub24iDQogICAgICAgICAgfQ0KICAgICAgICB9LA0KICAgICAgICAiaWQiOiAiaGFwcHljYXQiLA0KICAgICAgICAidHlwZSI6ICJBc3NldCIsDQogICAgICAgICJjcmVhdGVkQXQiOiAiMjAxOC0wMi0yOFQxNDowNTowNi42NjFaIiwNCiAgICAgICAgInVwZGF0ZWRBdCI6ICIyMDE4LTAyLTI4VDE0OjA1OjA2LjY2MVoiLA0KICAgICAgICAiZW52aXJvbm1lbnQiOiB7DQogICAgICAgICAgInN5cyI6IHsNCiAgICAgICAgICAgICJpZCI6ICJtYXN0ZXIiLA0KICAgICAgICAgICAgInR5cGUiOiAiTGluayIsDQogICAgICAgICAgICAibGlua1R5cGUiOiAiRW52aXJvbm1lbnQiDQogICAgICAgICAgfQ0KICAgICAgICB9LA0KICAgICAgICAicmV2aXNpb24iOiAxDQogICAgICB9LA0KICAgICAgImZpZWxkcyI6IHsNCiAgICAgICAgInRpdGxlIjogew0KICAgICAgICAgICJlbi1VUyI6ICJoYXBweWNhdCINCiAgICAgICAgfSwNCiAgICAgICAgImZpbGUiOiB7DQogICAgICAgICAgImVuLVVTIjogew0KICAgICAgICAgICAgInVybCI6ICIvL2ltYWdlcy5jdGZhc3NldHMubmV0L2R1bXJpM2Via25vbi9oYXBweWNhdC8xY2Q4YzkzNGM5Y2Q5ZTBjZWQ4MTcyOTg0Mzk3M2Y4ZC9oYXBweWNhdHcuanBnIiwNCiAgICAgICAgICAgICJkZXRhaWxzIjogew0KICAgICAgICAgICAgICAic2l6ZSI6IDU5OTM5LA0KICAgICAgICAgICAgICAiaW1hZ2UiOiB7DQogICAgICAgICAgICAgICAgIndpZHRoIjogMjczLA0KICAgICAgICAgICAgICAgICJoZWlnaHQiOiAzOTcNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSwNCiAgICAgICAgICAgICJmaWxlTmFtZSI6ICJoYXBweWNhdHcuanBnIiwNCiAgICAgICAgICAgICJjb250ZW50VHlwZSI6ICJpbWFnZS9qcGVnIg0KICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgfQ0KICAgIH0sDQogICAgew0KICAgICAgInN5cyI6IHsNCiAgICAgICAgInNwYWNlIjogew0KICAgICAgICAgICJzeXMiOiB7DQogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwNCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJTcGFjZSIsDQogICAgICAgICAgICAiaWQiOiAiZHVtcmkzZWJrbm9uIg0KICAgICAgICAgIH0NCiAgICAgICAgfSwNCiAgICAgICAgImlkIjogIm55YW5jYXQiLA0KICAgICAgICAidHlwZSI6ICJBc3NldCIsDQogICAgICAgICJjcmVhdGVkQXQiOiAiMjAxOC0wMi0yOFQxNDowNTowNS41MDJaIiwNCiAgICAgICAgInVwZGF0ZWRBdCI6ICIyMDE4LTAyLTI4VDE0OjA1OjA1LjUwMloiLA0KICAgICAgICAiZW52aXJvbm1lbnQiOiB7DQogICAgICAgICAgInN5cyI6IHsNCiAgICAgICAgICAgICJpZCI6ICJtYXN0ZXIiLA0KICAgICAgICAgICAgInR5cGUiOiAiTGluayIsDQogICAgICAgICAgICAibGlua1R5cGUiOiAiRW52aXJvbm1lbnQiDQogICAgICAgICAgfQ0KICAgICAgICB9LA0KICAgICAgICAicmV2aXNpb24iOiAxDQogICAgICB9LA0KICAgICAgImZpZWxkcyI6IHsNCiAgICAgICAgInRpdGxlIjogew0KICAgICAgICAgICJlbi1VUyI6ICJOeWFuIENhdCINCiAgICAgICAgfSwNCiAgICAgICAgImZpbGUiOiB7DQogICAgICAgICAgImVuLVVTIjogew0KICAgICAgICAgICAgInVybCI6ICIvL2ltYWdlcy5jdGZhc3NldHMubmV0L2R1bXJpM2Via25vbi9ueWFuY2F0L2M3OGFhOTdiZjU1YjdkZTIyOWVlNWE1Zjg4MjYxYWE0L055YW5fY2F0XzI1MHB4X2ZyYW1lLnBuZyIsDQogICAgICAgICAgICAiZGV0YWlscyI6IHsNCiAgICAgICAgICAgICAgInNpemUiOiAxMjI3MywNCiAgICAgICAgICAgICAgImltYWdlIjogew0KICAgICAgICAgICAgICAgICJ3aWR0aCI6IDI1MCwNCiAgICAgICAgICAgICAgICAiaGVpZ2h0IjogMjUwDQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0sDQogICAgICAgICAgICAiZmlsZU5hbWUiOiAiTnlhbl9jYXRfMjUwcHhfZnJhbWUucG5nIiwNCiAgICAgICAgICAgICJjb250ZW50VHlwZSI6ICJpbWFnZS9wbmciDQogICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICB9DQogICAgfQ0KICBdLA0KICAibmV4dFBhZ2VVcmwiOiAiaHR0cHM6Ly9jZG4uY29udGVudGZ1bC5jb20vc3BhY2VzL2R1bXJpM2Via25vbi9lbnZpcm9ubWVudHMvbWFzdGVyL3N5bmM/c3luY190b2tlbj13NVpHdzZKRndxWm1WY0tzRThLb3c0Z3J3NDVRZHliRHFjS3l3NTA3dzRYRGpzT3Z3cmZEbjhPRVBWME5XOEtjdzRWZ0NFbG9CVF9EdjJYQ214RXFWTU9ud3FKUHdwekRyOEtSdzVwekhCczJ3ckhDaG1BMERoX0N0c09RdzZ2RHU4T193NzNEbno0UHc0SXd3cERDdGNLRHdxcHN3b3JDdWNLNSINCn0NCg==", + "url" : "https:\/\/cdn.contentful.com\/spaces\/dumri3ebknon\/environments\/master\/sync?initial=true" + }, + "recorded_at" : 1529670474.3650122, + "request" : { + "headers" : { + "X-Contentful-User-Agent" : "sdk contentful.swift\/3.0.0; platform Swift\/4.0; os macOS\/10.13.5;", + "Authorization" : "Bearer e566e6f1d0545862159b6c63fddd25bebe0aa5c1bb8cbf9418c8531feff0d564" + }, + "method" : "GET", + "url" : "https:\/\/cdn.contentful.com\/spaces\/dumri3ebknon\/environments\/master\/sync?initial=true" + } + }, + { + "response" : { + "status" : 200, + "headers" : { + "Date" : "Fri, 22 Jun 2018 12:27:55 GMT", + "Content-Length" : "322", + "access-control-expose-headers" : "Etag", + "access-control-allow-headers" : "Accept,Accept-Language,Authorization,Cache-Control,Content-Length,Content-Range,Content-Type,DNT,Destination,Expires,If-Match,If-Modified-Since,If-None-Match,Keep-Alive,Last-Modified,Origin,Pragma,Range,User-Agent,X-Http-Method-Override,X-Mx-ReqToken,X-Requested-With,X-Contentful-Version,X-Contentful-Content-Type,X-Contentful-Organization,X-Contentful-Skip-Transformation,X-Contentful-User-Agent,X-Contentful-Enable-Alpha-Feature", + "x-cache" : "MISS", + "Age" : "0", + "x-served-by" : "cache-ams4136-AMS", + "Etag" : "\"aa7ead176d47fcf55d83036855376568\"", + "x-timer" : "S1529670476.535079,VS0,VE232", + "Accept-Ranges" : "bytes", + "Vary" : "Accept-Encoding", + "x-contentful-request-id" : "1dc330d98b32a55ca48a471e87a15fe3", + "x-content-type-options" : "nosniff", + "access-control-allow-methods" : "GET,HEAD,OPTIONS", + "Content-Type" : "application\/vnd.contentful.delivery.v1+json", + "access-control-max-age" : "86400", + "x-cache-hits" : "0", + "Access-Control-Allow-Origin" : "*", + "Server" : "Contentful", + "Cache-Control" : "max-age=0", + "Via" : "1.1 varnish" + }, + "body" : "ew0KICAic3lzIjogew0KICAgICJ0eXBlIjogIkFycmF5Ig0KICB9LA0KICAiaXRlbXMiOiBbICAgIA0KICAgIHsNCiAgICAgICJzeXMiOiB7DQogICAgICAgICJzcGFjZSI6IHsNCiAgICAgICAgICAic3lzIjogew0KICAgICAgICAgICAgInR5cGUiOiAiTGluayIsDQogICAgICAgICAgICAibGlua1R5cGUiOiAiU3BhY2UiLA0KICAgICAgICAgICAgImlkIjogImR1bXJpM2Via25vbiINCiAgICAgICAgICB9DQogICAgICAgIH0sDQogICAgICAgICJpZCI6ICJnYXJmaWVsZDIiLA0KICAgICAgICAidHlwZSI6ICJFbnRyeSIsDQogICAgICAgICJjcmVhdGVkQXQiOiAiMjAxOC0wMi0yOFQxNDowNToyMy4yODBaIiwNCiAgICAgICAgInVwZGF0ZWRBdCI6ICIyMDE4LTAyLTI4VDE0OjA1OjIzLjI4MFoiLA0KICAgICAgICAiZW52aXJvbm1lbnQiOiB7DQogICAgICAgICAgInN5cyI6IHsNCiAgICAgICAgICAgICJpZCI6ICJtYXN0ZXIiLA0KICAgICAgICAgICAgInR5cGUiOiAiTGluayIsDQogICAgICAgICAgICAibGlua1R5cGUiOiAiRW52aXJvbm1lbnQiDQogICAgICAgICAgfQ0KICAgICAgICB9LA0KICAgICAgICAicmV2aXNpb24iOiAxLA0KICAgICAgICAiY29udGVudFR5cGUiOiB7DQogICAgICAgICAgInN5cyI6IHsNCiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLA0KICAgICAgICAgICAgImxpbmtUeXBlIjogIkNvbnRlbnRUeXBlIiwNCiAgICAgICAgICAgICJpZCI6ICJjYXQiDQogICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICB9LA0KICAgICAgImZpZWxkcyI6IHsNCiAgICAgICAgIm5hbWUiOiB7DQogICAgICAgICAgImVuLVVTIjogIkdhcmZpZWxkIiwNCiAgICAgICAgICAidGxoIjogIkdhcmZpZWxkIg0KICAgICAgICB9LA0KICAgICAgICAibGlrZXMiOiB7DQogICAgICAgICAgImVuLVVTIjogWw0KICAgICAgICAgICAgImxhc2FnbmEiDQogICAgICAgICAgXQ0KICAgICAgICB9LA0KICAgICAgICAiY29sb3IiOiB7DQogICAgICAgICAgImVuLVVTIjogIm9yYW5nZSINCiAgICAgICAgfSwNCiAgICAgICAgImJpcnRoZGF5Ijogew0KICAgICAgICAgICJlbi1VUyI6ICIxOTc5LTA2LTE4VDIzOjAwOjAwKzAwOjAwIg0KICAgICAgICB9LA0KICAgICAgICAibGlmZXMiOiB7DQogICAgICAgICAgImVuLVVTIjogbnVsbA0KICAgICAgICB9LA0KICAgICAgICAibGl2ZXMiOiB7DQogICAgICAgICAgImVuLVVTIjogOQ0KICAgICAgICB9DQogICAgICB9DQogICAgfSwNCiAgICB7DQogICAgICAic3lzIjogew0KICAgICAgICAic3BhY2UiOiB7DQogICAgICAgICAgInN5cyI6IHsNCiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLA0KICAgICAgICAgICAgImxpbmtUeXBlIjogIlNwYWNlIiwNCiAgICAgICAgICAgICJpZCI6ICJkdW1yaTNlYmtub24iDQogICAgICAgICAgfQ0KICAgICAgICB9LA0KICAgICAgICAiaWQiOiAiR2x1ajlsenF1WWNLMGFnb0NrTVVzIiwNCiAgICAgICAgInR5cGUiOiAiRGVsZXRlZEFzc2V0IiwNCiAgICAgICAgImVudmlyb25tZW50Ijogew0KICAgICAgICAgICJzeXMiOiB7DQogICAgICAgICAgICAiaWQiOiAibWFzdGVyIiwNCiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLA0KICAgICAgICAgICAgImxpbmtUeXBlIjogIkVudmlyb25tZW50Ig0KICAgICAgICAgIH0NCiAgICAgICAgfSwNCiAgICAgICAgImNyZWF0ZWRBdCI6ICIyMDE4LTA0LTAyVDA5OjM2OjE5LjA2NFoiLA0KICAgICAgICAidXBkYXRlZEF0IjogIjIwMTgtMDQtMDJUMDk6MzY6MTkuMDY0WiIsDQogICAgICAgICJkZWxldGVkQXQiOiAiMjAxOC0wNC0wMlQwOTo0MDoxOS4wNjRaIiwNCiAgICAgICAgInJldmlzaW9uIjogMQ0KICAgICAgfQ0KICAgIH0NCiAgXSwNCiAgIm5leHRTeW5jVXJsIjogImh0dHBzOi8vY2RuLmNvbnRlbnRmdWwuY29tL3NwYWNlcy9kdW1yaTNlYmtub24vZW52aXJvbm1lbnRzL21hc3Rlci9zeW5jP3N5bmNfdG9rZW49dzVaR3c2SkZ3cVptVmNLc0U4S293NGdydzQ1UWR5YkRxY0t5dzUwN3c0WERqc092d3JmRG44T0VQVjBOVzhLY3c0VmdDRWxvQlRfRHYyWENteEVxVk1PbndxSlB3cHpEcjhLUnc1cHpIQnMyd3JIQ2htQTBEaF9DdHNPUXc2dkR1OE9fdzczRG56NFB3NEl3d3BEQ3RjS0R3cXBzd29yQ3VjSzUiDQp9DQo=", + "url" : "https:\/\/cdn.contentful.com\/spaces\/dumri3ebknon\/environments\/master\/sync?sync_token=w5ZGw6JFwqZmVcKsE8Kow4grw45QdybDqcKyw507w4XDjsOvwrfDn8OEPV0NW8Kcw4VgCEloBT_Dv2XCmxEqVMOnwqJPwpzDr8KRw5pzHBs2wrHChmA0Dh_CtsOQw6vDu8O_w73Dnz4Pw4IwwpDCtcKDwqpsworCucK5" + }, + "recorded_at" : 1529670474.6867781, + "request" : { + "headers" : { + "X-Contentful-User-Agent" : "sdk contentful.swift\/3.0.0; platform Swift\/4.0; os macOS\/10.13.5;", + "Authorization" : "Bearer e566e6f1d0545862159b6c63fddd25bebe0aa5c1bb8cbf9418c8531feff0d564" + }, + "method" : "GET", + "url" : "https:\/\/cdn.contentful.com\/spaces\/dumri3ebknon\/environments\/master\/sync?sync_token=w5ZGw6JFwqZmVcKsE8Kow4grw45QdybDqcKyw507w4XDjsOvwrfDn8OEPV0NW8Kcw4VgCEloBT_Dv2XCmxEqVMOnwqJPwpzDr8KRw5pzHBs2wrHChmA0Dh_CtsOQw6vDu8O_w73Dnz4Pw4IwwpDCtcKDwqpsworCucK5" + } + }, + { + "response" : { + "status" : 200, + "headers" : { + "Date" : "Fri, 22 Jun 2018 12:27:55 GMT", + "Content-Length" : "546", + "access-control-expose-headers" : "Etag", + "access-control-allow-headers" : "Accept,Accept-Language,Authorization,Cache-Control,Content-Length,Content-Range,Content-Type,DNT,Destination,Expires,If-Match,If-Modified-Since,If-None-Match,Keep-Alive,Last-Modified,Origin,Pragma,Range,User-Agent,X-Http-Method-Override,X-Mx-ReqToken,X-Requested-With,X-Contentful-Version,X-Contentful-Content-Type,X-Contentful-Organization,X-Contentful-Skip-Transformation,X-Contentful-User-Agent,X-Contentful-Enable-Alpha-Feature", + "x-cache" : "HIT", + "Age" : "867", + "x-served-by" : "cache-ams4136-AMS", + "Etag" : "\"efc303b0236e7208c740feefeedc0cec\"", + "x-timer" : "S1529670475.404197,VS0,VE1", + "Accept-Ranges" : "bytes", + "Vary" : "Accept-Encoding", + "x-contentful-request-id" : "568d1280a018117388cb28a5cb47d795", + "x-content-type-options" : "nosniff", + "access-control-allow-methods" : "GET,HEAD,OPTIONS", + "Content-Type" : "application\/vnd.contentful.delivery.v1+json", + "access-control-max-age" : "86400", + "x-cache-hits" : "1", + "Access-Control-Allow-Origin" : "*", + "Server" : "Contentful", + "Cache-Control" : "max-age=0", + "Via" : "1.1 varnish" + }, + "body" : "ewogICJzeXMiOiB7CiAgICAidHlwZSI6ICJBcnJheSIKICB9LAogICJ0b3RhbCI6IDIsCiAgInNraXAiOiAwLAogICJsaW1pdCI6IDEwMDAsCiAgIml0ZW1zIjogWwogICAgewogICAgICAiY29kZSI6ICJlbi1VUyIsCiAgICAgICJuYW1lIjogIkVuZ2xpc2giLAogICAgICAiZGVmYXVsdCI6IHRydWUsCiAgICAgICJmYWxsYmFja0NvZGUiOiBudWxsLAogICAgICAic3lzIjogewogICAgICAgICJpZCI6ICIwc2xicXV0NXFQam1UQlhxN01HaFhjIiwKICAgICAgICAidHlwZSI6ICJMb2NhbGUiLAogICAgICAgICJ2ZXJzaW9uIjogMgogICAgICB9CiAgICB9LAogICAgewogICAgICAiY29kZSI6ICJ0bGgiLAogICAgICAibmFtZSI6ICJLbGluZ29uIiwKICAgICAgImRlZmF1bHQiOiBmYWxzZSwKICAgICAgImZhbGxiYWNrQ29kZSI6ICJlbi1VUyIsCiAgICAgICJzeXMiOiB7CiAgICAgICAgImlkIjogIjI1eWJ5V2lyYVpGenkwQVk2dlBVbU0iLAogICAgICAgICJ0eXBlIjogIkxvY2FsZSIsCiAgICAgICAgInZlcnNpb24iOiAwCiAgICAgIH0KICAgIH0KICBdCn0K", + "url" : "https:\/\/cdn.contentful.com\/spaces\/dumri3ebknon\/environments\/master\/locales?limit=1000" + }, + "recorded_at" : 1529670474.3007751, + "request" : { + "headers" : { + "X-Contentful-User-Agent" : "sdk contentful.swift\/3.0.0; platform Swift\/4.0; os macOS\/10.13.5;", + "Authorization" : "Bearer e566e6f1d0545862159b6c63fddd25bebe0aa5c1bb8cbf9418c8531feff0d564" + }, + "method" : "GET", + "url" : "https:\/\/cdn.contentful.com\/spaces\/dumri3ebknon\/environments\/master\/locales?limit=1000" + } + } + ], + "name" : "SyncTests" +} diff --git a/Tests/ContentfulTests/SyncTests.swift b/Tests/ContentfulTests/SyncTests.swift index 43a19799..37cf269a 100644 --- a/Tests/ContentfulTests/SyncTests.swift +++ b/Tests/ContentfulTests/SyncTests.swift @@ -24,10 +24,12 @@ class SyncTests: XCTestCase { (client.urlSession as? DVR.Session)?.endRecording() } - func waitUntilSync(syncableTypes: SyncSpace.SyncableTypes, action: @escaping (_ space: SyncSpace) -> ()) { + func waitUntilSync(client: Client = SyncTests.client, + syncableTypes: SyncSpace.SyncableTypes, + action: @escaping (_ space: SyncSpace) -> ()) { let expectation = self.expectation(description: "Sync test expecation") - SyncTests.client.sync(syncableTypes: syncableTypes) { result in + client.sync(syncableTypes: syncableTypes) { result in switch result { case .success(let syncSpace): action(syncSpace) @@ -83,7 +85,18 @@ class SyncTests: XCTestCase { XCTAssertEqual($0.entries.count, 3) } } - + + func testSyncWithPagination() { + let client = TestClientFactory.testClient(withCassetteNamed: "SyncWithPaginationTests") + (client.urlSession as? DVR.Session)?.beginRecording() + + waitUntilSync(client: client, syncableTypes: .all) { + XCTAssertEqual($0.assets.count, 4) + XCTAssertEqual($0.entries.count, 11) + } + + (client.urlSession as? DVR.Session)?.endRecording() + } } #if !API_COVERAGE