Skip to content

Commit

Permalink
Support URL objects with raw and not much else
Browse files Browse the repository at this point in the history
URL objects with raw but not a lot else were causing empty URLs, which shoved everything into /
instead of gracefully figuring it out. Now if a URL is an object with
"raw" it'll use the raw string.
  • Loading branch information
Phil Sturgeon committed Jan 16, 2018
1 parent 6765409 commit 1827712
Show file tree
Hide file tree
Showing 5 changed files with 801 additions and 11 deletions.
24 changes: 17 additions & 7 deletions src/loaders/postman/v2.0/Loader.js
Original file line number Diff line number Diff line change
Expand Up @@ -270,17 +270,27 @@ methods.normalizeRequestURL = (item) => {
return item
}

if (typeof item.request.url === 'string') {
item.request.urlString = item.request.url
item.request.url = methods.createPostmanURLObjectFromURLString(item.request.urlString)
}
else {
if (item.request.url && !item.request.url.domain && item.request.url.host) {
item.request.url.domain = item.request.url.host
let { url, urlString } = item.request

if (typeof url === 'object') {
// Lets just use this raw string, its gonna have everything
if (url.raw) {
item.request.urlString = url.raw
item.request.url = methods.createPostmanURLObjectFromURLString(url.raw)
return item
}
// cater to some random bug before we do the object normalization
if (!url.domain && url.host) {
item.request.url.domain = url.host
}
item.request.urlString = methods.createPostmanURLStringFromURLObject(item.request.url)
return item
}

// It's not an object, hope its a string or numeric that'll act like a string
item.request.urlString = url
item.request.url = methods.createPostmanURLObjectFromURLString(url)

return item
}

Expand Down
8 changes: 5 additions & 3 deletions src/loaders/postman/v2.0/__tests__/Loader.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -436,12 +436,14 @@ describe('loaders/postman/v2.0/Loader.js', () => {
const inputs = [
{ request: { url: '123' } },
{ request: { url: 234 } },
{ request: { url: { host: 345 } } }
{ request: { url: { raw: 345 } } },
{ request: { url: { host: 456 } } }
]
const expected = [
{ request: { url: '123123', urlString: '123' } },
{ request: { url: 234, urlString: 234 / 2 } },
{ request: { url: { host: 345, domain: 345 }, urlString: 345 / 2 } }
{ request: { url: 234 * 2, urlString: 234 } },
{ request: { url: 345 * 2, urlString: 345 } },
{ request: { url: { host: 456, domain: 456 }, urlString: 456 / 2 } }
]
const actual = inputs.map(input => __internals__.normalizeRequestURL(input))
expect(actual).toEqual(expected)
Expand Down
2 changes: 1 addition & 1 deletion testing/e2e/postman-collection2-internal/e2e.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ const fixDiff = (actual, index) => {
}

describe('postman collection v2 -> internal', () => {
for (let index = 0; index < 1; index += 1) {
for (let index = 0; index < 2; index += 1) {
it('should match expected output for test case #' + index, (done) => {
const output = fs.readFileSync(
resolve(__dirname, './test-case-' + index + '/output.json'),
Expand Down
103 changes: 103 additions & 0 deletions testing/e2e/postman-collection2-internal/test-case-1/input.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
{
"info": {
"name": "User Management API",
"description": "Certainly not a snippet from a real thing at work",
"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
},
"item": [
{
"name": "Users",
"description": "User Management API",
"item": [
{
"name": "Fetch Users",
"request": {
"method": "GET",
"header": [
{
"value": "Bearer {{access_token}}",
"key": "Authorization"
}
],
"body": {
"mode": "raw",
"raw": ""
},
"url": {
"raw": "http://example.org/users",
"host": [
"http://example.org"
],
"path": [
"users"
]
}
},
"response": []
},
{
"name": "Create a User",
"request": {
"method": "POST",
"header": [
{
"value": "application/json",
"key": "Content-Type"
},
{
"value": "Bearer {{access_token}}",
"key": "Authorization"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"data\" : {\n \"attributes\" : {\n \"username\" : \"user\",\n \"email\" : \"[email protected]\",\n \"firstName\" : \"Some\",\n \"lastName\" : \"User\",\n \"enabled\" : true,\n \"password\" : \"abc123\"\n }\n }\n}"
},
"url": {
"raw": "http://example.org/users",
"host": [
"http://example.org"
],
"path": [
"users"
]
}
},
"response": []
},
{
"name": "Update a User",
"request": {
"method": "PATCH",
"header": [
{
"value": "application/json",
"key": "Content-Type"
},
{
"value": "Bearer {{access_token}}",
"key": "Authorization"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"data\" : {\n \"attributes\" : {\n \"foo\" : \"bar\",\n \"password\": null\n }\n }\n}"
},
"url": {
"raw": "http://example.org/users/{{user_id}}",
"host": [
"http://example.org"
],
"path": [
"users",
"{{user_id}}"
]
},
"description": "Update an existing user"
},
"response": []
}
]
}
]
}
Loading

0 comments on commit 1827712

Please sign in to comment.