diff --git a/lib/activityresults/activityresult.js b/lib/activityresults/activityresult.js index 155a6c2bb..0bde8f24b 100644 --- a/lib/activityresults/activityresult.js +++ b/lib/activityresults/activityresult.js @@ -4,10 +4,14 @@ var ld = require('lodash'); var ActivityResult = function ActivityResult(data) { var _this = this; + this.tags = []; + this.photos = []; + if (data) { this.id = data.id; this.created_by = data.created_by; - this.photos = data.photos; + this.photos = data.photos || []; + this.tags = data.tags || []; } this.getPhotoById = function getPhotoById(id) { diff --git a/lib/activityresults/index.js b/lib/activityresults/index.js index 6239ed73f..2437ac7c0 100644 --- a/lib/activityresults/index.js +++ b/lib/activityresults/index.js @@ -33,7 +33,9 @@ app.post('/', function (req, res) { if (!activityResultName) { return res.send(BAD_REQUEST); } - activityresultsPersistence.save(new ActivityResult({id: activityResultName, created_by: req.user.member.id }), function (err) { + var tags = (req.body.tags || "").split(','); + + activityresultsPersistence.save(new ActivityResult({id: activityResultName, tags: tags, created_by: req.user.member.id }), function (err) { if (err) { return res.send(BAD_REQUEST); } diff --git a/lib/activityresults/views/edit_photo.jade b/lib/activityresults/views/edit_photo.jade index 5ed841485..ee76a3be8 100644 --- a/lib/activityresults/views/edit_photo.jade +++ b/lib/activityresults/views/edit_photo.jade @@ -15,15 +15,10 @@ block content .col-md-4 h4 Step #2: Pick a room ul.tag-list - li - input#tag-hopper(type="radio",name="tag",value="hopper") - label.btn.btn-default(for="tag-hopper") # Hopper - li - input#tag-lovelace(type="radio",name="tag",value="lovelace") - label.btn.btn-default(for="tag-lovelace") # Lovelace - li - input#tag-liskov(type="radio",name="tag",value="liskov") - label.btn.btn-default(for="tag-liskov") # Liskov + each availableTag, i in activityResult.tags + li + input(type="radio",name="tag",value=availableTag,id="tag-"+i) + label.btn.btn-default(for="tag-" + i) # #{availableTag} .row .col-md-8 h4 Step #3: What's on that photo? diff --git a/lib/activityresults/views/notFound.jade b/lib/activityresults/views/notFound.jade index 867b25368..b3cd1b31f 100644 --- a/lib/activityresults/views/notFound.jade +++ b/lib/activityresults/views/notFound.jade @@ -16,5 +16,10 @@ block content form(role='form',method='POST',action=createUri) +csrf .form-group - input(name='activityResultName',type='hidden',value='#{activityResultName}') + label(for='inputName') Name + input.form-control#inputName(name='activityResultName',type='text',readonly='readonly',value='#{activityResultName}') + .form-group + label(for='inputTag') Tags (comma-separated) + input.form-control#inputTags(name='tags',type='text') + .form-group button.btn.btn-primary(type='submit') Jetzt anlegen diff --git a/test/activityresults/activityresult_model_test.js b/test/activityresults/activityresult_model_test.js index 95559bb2d..ece51bae0 100644 --- a/test/activityresults/activityresult_model_test.js +++ b/test/activityresults/activityresult_model_test.js @@ -34,6 +34,10 @@ describe('Activity result', function () { expect(new ActivityResult({created_by: 'me'})).to.have.property('created_by', 'me'); }); + it('should have a field of defined tags for an activityResult', function () { + expect(new ActivityResult({tags: ['1', '2']}).tags).to.be.eql(['1', '2']); + }); + describe('photo subdocument', function () { it('should be retrievable by id', function () { var activityResult = new ActivityResult({ diff --git a/test/activityresults/activityresults_integration_edit_test.js b/test/activityresults/activityresults_integration_edit_test.js index 655e8a4c2..a18a05153 100644 --- a/test/activityresults/activityresults_integration_edit_test.js +++ b/test/activityresults/activityresults_integration_edit_test.js @@ -20,7 +20,7 @@ describe('/activityresults/:result/photo/:photo', function () { var photoId = 'photo_id'; beforeEach(function () { sinon.stub(activityresultsService, 'getActivityResultByName', function (activityResultName, callback) { - callback(null, new ActivityResult({ id: "foo", name: "foobar", created_by: 1, photos: [{id: photoId, title: 'mishka', uploaded_by: 1}]})); + callback(null, new ActivityResult({ id: "foo", name: "foobar", created_by: 1, tags: [], photos: [{id: photoId, title: 'mishka', uploaded_by: 1}]})); }); sinon.stub(activityresultsService, 'addPhotoToActivityResult', function (activityResultName, photo, callback) { callback(); diff --git a/test/activityresults/activityresults_integration_test.js b/test/activityresults/activityresults_integration_test.js index dbc0ec4e6..fc5d8f902 100644 --- a/test/activityresults/activityresults_integration_test.js +++ b/test/activityresults/activityresults_integration_test.js @@ -7,6 +7,7 @@ var expect = require('must'); var beans = conf.get('beans'); var activityresultsService = beans.get('activityresultsService'); +var activityresultsPersistence = beans.get('activityresultsPersistence'); var createApp = require('../../testutil/testHelper')('activityresultsApp').createApp; @@ -86,6 +87,28 @@ describe('/activityresults', function () { .expect(303, done); }); + it('should create a new activity result with tags', function (done) { + var theResult; + sinon.stub(activityresultsPersistence, 'save', function (activityResult, callback) { + theResult = activityResult; + callback(null, activityResult); + }); + + var app = createApp(1); + request(app) + .post('/') + .type('form') + .send({ activityResultName: "MyActivityResult", tags: 'myFirstTag,mySecondTag' }) + .expect(303) + .end(function (err) { + if (err) { + done(err); + } + expect(theResult.tags).to.eql(['myFirstTag', 'mySecondTag']); + done(); + }); + }); + it('should reject request without activityResultName parameter', function (done) { request(createApp(1)) .post('/')