Skip to content

Commit

Permalink
Adds memento-list, memento, and mementoCreate functionality and initi…
Browse files Browse the repository at this point in the history
…al unit and integration tests

Adds basic mementos module, controller, and html to application

Adds spec for app.mementos and adds initial unit test for controller creation

Adds mock memento data for getMementos testing

Adds unit tests working with mock mementos data in dataservice spec

Adds app.mementos to module

Created and received mementos are now displayed on mementos view

Adds mementos controller unit tests with mock data

Begins links mementos view to created and existing memento views

Adds a mock data for mementoDetail

Memento unit tests added

Refactors code to be more readable

Adds memento.module to app

Adds memento.module

Adds memento javascript tags to index.html

Sets up nested state for memento

All tests passed for core functionality

Mementos to memento displaying moments is now functional

Adds additional unit test for getMemento method

Adds functionality to hide/show received mementos depending on if user is creating memento or not

Adds memento create view, controller, and module into application

Adds and solves unit tests for memento-create

Adds memento creation functionality

Passes failing tests

Title and recipients inputs for memento create now work.  Button disabled if these fields are not set

Save memento disabled until user input.  On save, send user to memento view for created memento

Removes tests from bottom of file

Refactors to meet style guide expectations

Fixes bugs from CurrentMoment commit

Removes momentID property from mementos controller

mementoCreate now adds latest moment to memento

Moments are now added in memento-create

Can now add moments to mementos in memento-list

Updates dataservice to get and add moments correctly

memento-create refactored to mimic moment.create style

Fixes saveMoment on moment.create.html.  Removes fake moment from dataservice

memento-list and dataservice refactored

memento and dataservice refactored

promisifies elements of memento-create and mementos-list

Adjusts addMoment method in dataservice

Tests failing.  Need to rewrite

Refactors memento-create code for style purposes

Memento test now working

Fixes mementos tests

Renames memento-create to memento.create

Change memento-create to memento.create
  • Loading branch information
kranrao committed Feb 21, 2015
1 parent 7838cb9 commit 2cb530f
Show file tree
Hide file tree
Showing 20 changed files with 623 additions and 253 deletions.
23 changes: 22 additions & 1 deletion client/www/app/app.module.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,10 @@

'ionic',
'app.core',
'app.moment'
'app.moment',
'app.mementos',
'app.memento',
'app.memento.create'
])

.run(function($ionicPlatform) {
Expand All @@ -29,6 +32,24 @@
url: '/moment',
templateUrl: 'app/moment/moment.create.html',
controller: 'MomentCreate as vm'
})

.state('mementos', {
url: '/mementos',
templateUrl: 'app/mementos-list/mementos.html',
controller: 'Mementos as vm'
})
// nested state
.state('memento', {
url: '/mementos/:ID',
templateUrl: 'app/memento/memento.html',
controller: 'Memento as vm'
})

.state('mementoCreate', {
url: '/create',
templateUrl: 'app/memento-create/memento.create.html',
controller: 'MementoCreate as vm'
});

// if none of the above states are matched, use this as the fallback
Expand Down
113 changes: 48 additions & 65 deletions client/www/app/core/dataservice.js
Original file line number Diff line number Diff line change
Expand Up @@ -30,53 +30,38 @@
getMemento: getMemento,
saveMoment: saveMoment,
saveMemento: saveMemento,
addMoment: addMoment
addMoment: addMoment,
/*NOTE: temp until server is connected*/
getMoment: getMoment
};

return service;

// NOTE: server will only return mementos associated with user
function getMementos() {
return mementos;
return $q(function(resolve, reject) {
resolve(mementos);
});
}

// NOTE: memento ID will be supplied from getMementos call in list view
function getMemento(ID) {
var memento;
var i;

ID = ID || 1;

for (i = 0; i < mementosDetail.length; i++) {
if (mementosDetail[i].ID === ID) {
memento = mementosDetail[i];
}
}

return memento;
return $q(function(resolve, reject) {
resolve(memento);
});
}

// NOTE: moment is saved to moments table first, then added to memento
function saveMoment(obj) {
obj = obj || {
'ID' : null,
'title' : 'fake moment',
'author' : ['Wes'],
'releaseDate' : '01/01/2016',
'meta' : {
'creationDate' : '01/01/2015',
'location' : {
'latitude' : 0,
'longitude' : 0,
'place' : 'Someplace fake'
}
},
content : [{
'type' : 'text',
'url' : 'This is a fake moment' // using media instead of url pointing to it for time being
}]
};

obj.ID = momentsSize() + 1;

moments.push(obj);
Expand All @@ -85,55 +70,71 @@
resolve(obj.ID);
});
}

// NOTE: temp until server is connected
function getMoment(ID) {
var moment;
var i;

for (i = 0; i < moments.length; i++) {
if(moments[i].ID === ID) {
moment = moments[i];
}
}

return $q(function(resolve, reject) {
resolve(moment);
});
}

// NOTE: addMoment happens concurrently with memento creation
function saveMemento(obj) {
obj = obj || {
'ID' : null,
'title' : 'Fake memento',
'owner' : 'Wes',
'authors' : ['Wes'],
'recipients' : ['Mom'],
'options' : {
'public' : false,
'releaseType' : 'default',
},
'latestReleasedIndex' : 1, // associated with moments array. latest moment released
'moments' : []
};

obj.ID = mementosSize() + 1;

// add to mementos detail
mementosDetail.push(obj);

// add to mementos
// NOTE: adds to mementos. Below is TEMPORARY as server will handle adjusting the memento object
var mementosObj = {
'ID': obj.ID,
'title': obj.title,
'authors' : obj.authors,
'recipients' : obj.recipients
};

if (obj.authors[0] === 'Wes') {
if (obj.authors[0] === 'Wes' || obj.authors[0] === 'User1') {
mementos.created.push(mementosObj);
} else {
mementos.received.push(mementosObj);
}

// TEMP
///////////////////////////////////////////////////////////////////////////////////////////////////

return $q(function(resolve, reject) {
resolve(obj.ID);
});
}

// NOTE: adds moment to selected memento
function addMoment(ID) {
function addMoment(mementoID, momentID) {
var i;

ID = ID || 1;

for (i = 0; i < mementosDetail.length; i++) {
if (mementosDetail[i].ID === ID) {
var moment = moments[momentsSize() - 1];
mementosDetail[i].moments.push(moment);
if (mementosDetail[i].ID === mementoID) {
return getMoment(momentID)
.then(function(data) {
mementosDetail[i].moments.push(data);
})
.catch(function(err) {
console.error('There was an error getting the moment:', err);
});
}
}

return $q(function(resolve, reject) {
resolve(momentID);
});
}

// NOTE: temp method to keep track of moment ID.
Expand All @@ -148,22 +149,4 @@

}

})();

/*for testing
var mementosBefore = dataservice.getMementos();
console.log('Mementos Before', mementosBefore);
var mementoBefore = dataservice.getMemento();
console.log('Memento Before', mementoBefore);
dataservice.saveMoment();
dataservice.saveMemento();
dataservice.addMoment();
var mementosAfter = dataservice.getMementos();
console.log('Mementos After', mementosAfter);
var mementoAfter = dataservice.getMemento();
console.log('Memento After', mementoAfter);*/
})();
22 changes: 22 additions & 0 deletions client/www/app/memento-create/memento.create.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
<ion-view view-title="{{vm.title}}">
<ion-content>

<div class="list list-inset">
<label class="item item-input">
<input type="text" placeholder="Memento Title" ng-model="vm.currentMemento.title">
</label>
</div>

<div class="list list-inset">
<label class="item item-input">
<input type="text" placeholder="Recipients" ng-model="vm.currentMemento.recipients[0]">
</label>
</div>

<!-- FIXME: both link and button need to be disabled until user has inputed validated info -->
<button ng-disabled="!vm.currentMemento.title || !vm.currentMemento.recipients[0]" on-tap="vm.saveMemento(vm.currentMemento)" class="button button-block button-positive">
Save
</button>

</ion-content>
</ion-view>
70 changes: 70 additions & 0 deletions client/www/app/memento-create/memento.create.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
(function() {
'use strict';

angular
.module('app.memento.create')
.controller('MementoCreate', MementoCreate);

/* @ngInject */
function MementoCreate($state, dataservice, CurrentMoment , $stateParams) {
/*jshint validthis: true */
var vm = this;
vm.title = 'Create Memento';
vm.currentMemento = new EmptyMemento();
vm.saveMemento = saveMemento;

activate();

////////////////////////////////////////////////////////////

function activate() {
return addMoment();
}

function saveMemento(currentMemento) {
return dataservice.saveMemento(currentMemento)
.then(function(mementoID) {

console.log('Memento ' + mementoID + ' has been saved.');
$state.go('memento', {ID: mementoID});

})
.catch(function(err) {
// TODO: Connection errors, DB errors.
// savingError(err);
console.error('There was an error saving memento:', err);
});
}

function addMoment() {
var momentID = CurrentMoment.get();

// NOTE: adds entire moment to fit dummy data. Will only add momentID when connected with server
return dataservice.getMoment(momentID.momentID)
.then(function(data) {
console.log('Successfull getting moment');

vm.currentMemento.moments.push(data);

// NOTE: sets moment back to an empty object
CurrentMoment.set({});
})
.catch(function(err) {
console.error('There was an error getting moment:', err);
});
}

function EmptyMemento() {
this.title = '';
this.owner = 'User1';
this.authors = [this.owner];
this.recipients = '';
this.options = {
'public' : false,
'releaseType' : 'default',
};
this.latestReleasedIndex = 1;
this.moments = [];
}
}
})();
5 changes: 5 additions & 0 deletions client/www/app/memento-create/memento.create.module.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
(function() {
'use strict';

angular.module('app.memento.create', []);
})();
14 changes: 13 additions & 1 deletion client/www/app/memento/memento.html
Original file line number Diff line number Diff line change
@@ -1 +1,13 @@
memento.html
<ion-view view-title="{{vm.memento.title}}">
<ion-content>

<div ng-repeat="moment in vm.memento.moments">

<div ng-repeat="item in moment.content">
{{item.url}}
</div>

</div>

</ion-content>
</ion-view>
39 changes: 39 additions & 0 deletions client/www/app/memento/memento.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
(function() {
'use strict';

angular
.module('app.memento')
.controller('Memento', Memento);

/* @ngInject */
function Memento(dataservice, $stateParams) {
/*jshint validthis: true */
var vm = this;
vm.memento = {};
vm.mementoID = Number($stateParams.ID);
vm.getMemento = getMemento;

activate();

////////////////////////////////////////////////////////////

function activate() {
return getMemento(vm.mementoID).then(function() {
console.log('Activated memento view');
});
}

function getMemento(ID) {
return dataservice.getMemento(ID)
.then(function(data) {
console.log('Successfull getting memento');

vm.memento = data;
})
.catch(function(err) {
console.error('There was an error getting memento:', err);
});
}

}
})();
5 changes: 5 additions & 0 deletions client/www/app/memento/memento.module.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
(function() {
'use strict';

angular.module('app.memento', []);
})();
Loading

0 comments on commit 2cb530f

Please sign in to comment.