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": [
 | |
|           ]
 | |
|         }
 | |
|       }
 | |
|     }
 | |
|   ]
 | |
| }
 |