var frisby = require('frisby'); var md5 = require('md5'); frisby.create('Landing page') .get('http://localhost:3000/') .expectStatus(200) .expectHeaderContains('content-type', 'text/html; charset=utf-8') .expectBodyContains('Hassle-free') .toss(); frisby.create('Open note page') .get('http://localhost:3000/new') .expectStatus(200) .expectHeaderContains('content-type', 'text/html; charset=utf-8') .expectBodyContains('Terms of Service') .toss(); frisby.create('Open TOS') .get('http://localhost:3000/TOS') .expectStatus(200) .expectHeaderContains('content-type', 'text/html; charset=utf-8') .expectBodyContains('Site Terms of Use Modifications') .toss(); frisby.create('Incurrect URL') .get('http://localhost:3000/abcdef') .expectStatus(404) .expectBodyContains('Not found') .toss(); frisby.create('Invalid posting') .post('http://localhost:3000/note') .expectStatus(400) .expectHeaderContains('content-type', 'text/html; charset=utf-8') .expectBodyContains('Bad request') .toss(); let testNote = 'This is a test note'; frisby.create('Invalid posting 2') .post('http://localhost:3000/note', { action: 'POST', note: testNote }) .expectStatus(400) .expectHeaderContains('content-type', 'text/html; charset=utf-8') .expectBodyContains('Bad request') .toss(); frisby.create('Invalid posting 3') .post('http://localhost:3000/note', { action: 'POST', session: md5("new"), signature: "assdss", note: testNote }) .expectStatus(400) .expectHeaderContains('content-type', 'text/html; charset=utf-8') .expectBodyContains('Signature mismatch') .toss(); frisby.create('Valid posting') .post('http://localhost:3000/note', { action: 'POST', session: md5("new"), signature: md5(md5("new") + testNote), password: '', note: testNote }) .expectStatus(302) .expectBodyContains('Found. Redirecting to') .expectHeaderContains('content-type', 'text/plain; charset=utf-8') .after(function(err, res, body) { let noteId = body.replace('Found. Redirecting to /', ''); frisby.create('Read posted note') .get('http://localhost:3000/' + noteId) .expectStatus(200) .expectBodyContains(testNote) .after((err, res, body) => { frisby.create('Illegal note editing attempt with empty password') .post('http://localhost:3000/note', { id: noteId, action: 'UPDATE', session: md5("new"), signature: md5(md5("new") + testNote+'!!!'), note: testNote + '!!!', password: '' }) .expectStatus(400) .expectBodyContains('Password is wrong') .toss() }) .after((err, res, body) => { frisby.create('Illegal note editing attempt') .post('http://localhost:3000/note', { id: noteId, action: 'UPDATE', session: md5("new"), signature: md5(md5("new") + testNote+'!!!'), note: testNote + '!!!', password: "aaabbb" }) .expectStatus(400) .expectBodyContains('Password is wrong') .toss() }) .toss() }) .toss(); frisby.create('Valid posting, editing and removal') .post('http://localhost:3000/note', { action: 'POST', session: md5("new"), signature: md5(md5("new") + testNote), password: 'aabbcc', note: testNote }) .expectStatus(302) .expectBodyContains('Found. Redirecting to') .expectHeaderContains('content-type', 'text/plain; charset=utf-8') .after(function(err, res, body) { var noteId = body.replace('Found. Redirecting to /', ''); frisby.create('Export posted note') .get('http://localhost:3000/' + noteId + "/export") .expectStatus(200) .expectHeaderContains('content-type', 'text/plain; charset=utf-8') .expectBodyContains(testNote) .toss(); frisby.create('Read posted note') .get('http://localhost:3000/' + noteId) .expectStatus(200) .expectBodyContains(testNote) .expectHeaderContains('content-type', 'text/html; charset=utf-8') .after((err, res, body) => { frisby.create('Unauthorized note editing attempt') .post('http://localhost:3000/note', { id: noteId, action: 'UPDATE', session: md5("new"), signature: md5(md5("new") + testNote+'!!!'), note: testNote + '!!!', password: "abbcc" }) .expectStatus(400) .expectBodyContains('Password is wrong') .toss() }) .after((err, res, body) => { frisby.create('Valid note editing attempt') .post('http://localhost:3000/note', { id: noteId, action: 'UPDATE', session: md5("new"), signature: md5(md5("new") + 'Changed!'), note: 'Changed!', password: "aabbcc" }) .expectStatus(302) .after((err, res, body) => { frisby.create('Read changed note') .get('http://localhost:3000/' + noteId) .expectStatus(200) .expectBodyContains('Changed!') .toss(); }) .after((err, res, body) => { frisby.create('Delete posted note') .post('http://localhost:3000/note',{ id: noteId, button: 'Delete', action: 'UPDATE', session: md5("new"), signature: md5(md5("new") + 'Changed!'), note: 'Changed!', password: "aabbcc" }) .expectStatus(200) .expectBodyContains('Note deleted') .toss(); }) .toss() }) .toss() frisby.create('Read stats of posted note') .expectStatus(200) .get('http://localhost:3000/' + noteId).toss() frisby.create('Read stats of posted note') .expectStatus(200) .get('http://localhost:3000/' + noteId).toss() frisby.create('Read stats of posted note') .expectStatus(200) .get('http://localhost:3000/' + noteId).toss() frisby.create('Read stats of posted note') .get('http://localhost:3000/' + noteId + '/stats') .expectHeaderContains('content-type', 'text/html; charset=utf-8') .expectStatus(200) .expectBodyContains('Statistics') .expectBodyContains('