{ "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: https://curse-arrow.gomix.me/ on GoMix or on your own publicly accessible domain.", "Start by remixing this boilerplate GoMix project: https://gomix.com/#!/project/shimmer-ripper. 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: https://dandelion-roar.gomix.me/ on GoMix or on your own publicly accessible domain.", "Start by remixing this boilerplate GoMix project: https://gomix.com/#!/project/shimmer-ripper. 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: https://thread-paper.gomix.me/ on GoMix or on your own publicly accessible domain.", "Start by remixing this boilerplate GoMix project: https://gomix.com/#!/project/shimmer-ripper. 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: https://fuschia-custard.gomix.me/ on GoMix or on your own publicly accessible domain.", "Start by remixing this boilerplate GoMix project: https://gomix.com/#!/project/fcc-message. 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 _id.", "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: https://purple-paladin.gomix.me/ on GoMix or on your own publicly accessible domain.", "Start by remixing this boilerplate GoMix project: https://gomix.com/#!/project/shimmer-ripper. 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": [ ] } } } ] }