208 lines
8.8 KiB
JSON
208 lines
8.8 KiB
JSON
{
|
|
"name": "API and Microservice Projects",
|
|
"order": 4,
|
|
"time": "150 hours",
|
|
"helpRoom": "HelpBackend",
|
|
"challenges": [
|
|
{
|
|
"id": "57ed709d334ad35e8fe79acb",
|
|
"title": "New Backend Format",
|
|
"isBeta": "true",
|
|
"meta": "This is just a test",
|
|
"description": [
|
|
"This is just a test of the new backend challenge test framework"
|
|
],
|
|
"tests": [{
|
|
"text": "website should return 200",
|
|
"testString": "getUserInput => $.ajax({ url: getUserInput('url'), method: 'HEAD' }).then(null, (err) => assert.fail(err));"
|
|
}, {
|
|
"text": "package.json should have a valid \"keywords\" key",
|
|
"testString": "getUserInput => ($.get(getUserInput('url') + '/_api/package.json').then(function(data){ var packJson = JSON.parse(data); assert(packJson.keywords); }, err => { throw new Error('Err: ' + err.statusText);}))"
|
|
}, {
|
|
"text": "\"keywords\" field should be an Array",
|
|
"testString": "getUserInput => ($.get(getUserInput('url') + '/_api/package.json').then(function(data){ var packJson = JSON.parse(data); assert.isArray(packJson.keywords); }, err => { throw new Error('Err: ' + err.statusText);}))"
|
|
}, {
|
|
"text": "\"keywords\" should include \"freecodecamp\"",
|
|
"testString": "getUserInput => ($.get(getUserInput('url') + '/_api/package.json').then(function(data){ var packJson = JSON.parse(data); assert.include(packJson.keywords, 'freecodecamp'); }, err => { throw new Error('Err: ' + err.statusText); }))"
|
|
}],
|
|
"type": "backend"
|
|
},
|
|
{
|
|
"id": "bd7158d8c443edefaeb5bdef",
|
|
"title": "Timestamp Microservice",
|
|
"description": [
|
|
"Build a full stack JavaScript app that is functionally similar to this: <a href='https://curse-arrow.gomix.me/' target='_blank'>https://curse-arrow.gomix.me/</a> on GoMix or on your own publicly accessible domain.",
|
|
"Start by remixing this boilerplate GoMix project: <a href='https://gomix.com/#!/project/shimmer-ripper'>https://gomix.com/#!/project/shimmer-ripper</a>. Then get all the tests for the below user stories to pass."
|
|
],
|
|
"challengeSeed": [],
|
|
"tests": [
|
|
{
|
|
"text": "I can pass a string as a parameter, and it will check to see whether that string contains either a unix timestamp or a natural language date (example: January 1, 2016).",
|
|
"testString": ""
|
|
},
|
|
{
|
|
"text": "If it does, it returns both the Unix timestamp and the natural language form of that date.",
|
|
"testString": ""
|
|
},
|
|
{
|
|
"text": "If it does not contain a date or Unix timestamp, it returns null for those properties.",
|
|
"testString": ""
|
|
}
|
|
],
|
|
"solutions": [],
|
|
"hints": [],
|
|
"type": "basejump",
|
|
"isRequired": true,
|
|
"releasedOn": "January 1, 2016",
|
|
"challengeType": 4,
|
|
"translations": {
|
|
"es": {
|
|
"title": "Microservicio de Marca Temporal",
|
|
"description": [
|
|
]
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"id": "bd7158d8c443edefaeb5bdff",
|
|
"title": "Request Header Parser Microservice",
|
|
"description": [
|
|
"Build a full stack JavaScript app that is functionally similar to this: <a href='https://dandelion-roar.gomix.me/' target='_blank'>https://dandelion-roar.gomix.me/</a> on GoMix or on your own publicly accessible domain.",
|
|
"Start by remixing this boilerplate GoMix project: <a href='https://gomix.com/#!/project/shimmer-ripper'>https://gomix.com/#!/project/shimmer-ripper</a>. Then get all the tests for the below user stories to pass."
|
|
],
|
|
"challengeSeed": [],
|
|
"tests": [
|
|
{
|
|
"text": "I can get the IP address, language and operating system for my browser.",
|
|
"testString": ""
|
|
}
|
|
],
|
|
"solutions": [],
|
|
"hints": [],
|
|
"type": "basejump",
|
|
"isRequired": true,
|
|
"releasedOn": "January 1, 2016",
|
|
"challengeType": 4,
|
|
"translations": {
|
|
"es": {
|
|
"title": "Microservicio para analizar el encabezado de una petición",
|
|
"description": [
|
|
]
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"id": "bd7158d8c443edefaeb5bd0e",
|
|
"title": "URL Shortener Microservice",
|
|
"description": [
|
|
"Build a full stack JavaScript app that is functionally similar to this: <a href='https://thread-paper.gomix.me/' target='_blank'>https://thread-paper.gomix.me/</a> on GoMix or on your own publicly accessible domain.",
|
|
"Start by remixing this boilerplate GoMix project: <a href='https://gomix.com/#!/project/shimmer-ripper'>https://gomix.com/#!/project/shimmer-ripper</a>. Then get all the tests for the below user stories to pass."
|
|
],
|
|
"challengeSeed": [],
|
|
"tests": [
|
|
{
|
|
"text": "I can pass a URL as a parameter and I will receive a shortened URL in the JSON response.",
|
|
"testString": ""
|
|
},
|
|
{
|
|
"text": "If I pass an invalid URL that doesn't follow the valid http://www.example.com format, the JSON response will contain an error instead.",
|
|
"testString": ""
|
|
},
|
|
{
|
|
"text": "When I visit that shortened URL, it will redirect me to my original link.",
|
|
"testString": ""
|
|
}
|
|
],
|
|
"solutions": [],
|
|
"hints": [],
|
|
"type": "basejump",
|
|
"isRequired": true,
|
|
"releasedOn": "January 1, 2016",
|
|
"challengeType": 4,
|
|
"translations": {
|
|
"es": {
|
|
"title": "Microservicio para acortar URLs",
|
|
"description": [
|
|
]
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"id": "bd7158d8c443edefaeb5bdee",
|
|
"title": "Exercise Tracker",
|
|
"description": [
|
|
"Build a full stack JavaScript app that is functionally similar to this: <a href='https://fuschia-custard.gomix.me/' target='_blank'>https://fuschia-custard.gomix.me/</a> on GoMix or on your own publicly accessible domain.",
|
|
"Start by remixing this boilerplate GoMix project: <a href='https://gomix.com/#!/project/fcc-message'>https://gomix.com/#!/project/fcc-message</a>. Then get all the tests for the below user stories to pass."
|
|
],
|
|
"challengeSeed": [],
|
|
"tests": [
|
|
{
|
|
"text": "I can create a user by posting form data username to /api/exercise/new-user and returned will be an object with username and <code>_id</code>.",
|
|
"testString": ""
|
|
},
|
|
{
|
|
"text": "I can get an array of all users by getting api/exercise/users with the same info as when creating a user.",
|
|
"testString": ""
|
|
},
|
|
{
|
|
"text": "I can add an exercise to any user by posting form data userId(_id), description, duration, and optionally date to /api/exercise/add. If no date supplied it will use current date. Returned will the the user object with also with the exercise fields added.",
|
|
"testString": ""
|
|
},
|
|
{
|
|
"text": "I can retrieve a full exercise log of any user by getting /api/exercise/log with a parameter of userId(_id). Return will be the user object with added array log and count (total exercise count).",
|
|
"testString": ""
|
|
},
|
|
{
|
|
"text": "I can retrieve part of the log of any user by also passing along optional parameters of from & to or limit. (Date format yyyy-mm-dd, limit = int)",
|
|
"testString": ""
|
|
}
|
|
],
|
|
"solutions": [],
|
|
"hints": [],
|
|
"type": "basejump",
|
|
"isRequired": true,
|
|
"releasedOn": "January 1, 2016",
|
|
"challengeType": 4,
|
|
"translations": {
|
|
"es": {
|
|
"title": "Capa de abstracción para buscar imágenes",
|
|
"description": [
|
|
]
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"id": "bd7158d8c443edefaeb5bd0f",
|
|
"title": "File Metadata Microservice",
|
|
"description": [
|
|
"Build a full stack JavaScript app that is functionally similar to this: <a href='https://purple-paladin.gomix.me/' target='_blank'>https://purple-paladin.gomix.me/</a> on GoMix or on your own publicly accessible domain.",
|
|
"Start by remixing this boilerplate GoMix project: <a href='https://gomix.com/#!/project/shimmer-ripper'>https://gomix.com/#!/project/shimmer-ripper</a>. Then get all the tests for the below user stories to pass."
|
|
],
|
|
"challengeSeed": [],
|
|
"tests": [
|
|
{
|
|
"text": "I can submit a FormData object that includes a file upload.",
|
|
"testString": ""
|
|
},
|
|
{
|
|
"text": "When I submit something, I will receive the file size in bytes within the JSON response.",
|
|
"testString": ""
|
|
}
|
|
],
|
|
"solutions": [],
|
|
"hints": [],
|
|
"type": "basejump",
|
|
"isRequired": true,
|
|
"releasedOn": "January 1, 2016",
|
|
"challengeType": 4,
|
|
"translations": {
|
|
"es": {
|
|
"title": "Microservicio de metadatos de archivos",
|
|
"description": [
|
|
]
|
|
}
|
|
}
|
|
}
|
|
]
|
|
}
|