diff --git a/.meteor/packages b/.meteor/packages index 4b3f213..de1e606 100644 --- a/.meteor/packages +++ b/.meteor/packages @@ -61,3 +61,4 @@ reywood:publish-composite barbatus:stars-rating arkham:comments-ui facts +gadicohen:sitemaps diff --git a/.meteor/versions b/.meteor/versions index ce2ba16..e9ae166 100644 --- a/.meteor/versions +++ b/.meteor/versions @@ -50,6 +50,8 @@ flowkey:raven@1.0.0 fortawesome:fontawesome@4.7.0 fourseven:scss@4.5.4 gadicc:blaze-react-component@1.4.0 +gadicohen:robots-txt@0.0.10 +gadicohen:sitemaps@0.0.26 geojson-utils@1.0.10 github-oauth@1.2.0 google-oauth@1.2.4 diff --git a/cucumber/features/general.feature b/cucumber/features/general.feature new file mode 100644 index 0000000..c3ea6a8 --- /dev/null +++ b/cucumber/features/general.feature @@ -0,0 +1,14 @@ +Feature: This app should generate a correct sitemap, etc + + @watch + Scenario: I verify that a sitemap is generated correctly + Given the page sitemap.xml + Then I check that exist this list of pages in the sitemap + | license | License | + | terms | Terms of Service | + | credits | Credits | + | privacy | Privacy Policy | + | fires | Active Fires | + | login | Login | + | signup | Signup | + # And should be spiderables diff --git a/cucumber/features/pages.feature b/cucumber/features/pages.feature index 1946218..1d6ff70 100644 --- a/cucumber/features/pages.feature +++ b/cucumber/features/pages.feature @@ -1,4 +1,3 @@ -@watch Feature: Test all secundary pages Scenario: Check that all secondary pages work well diff --git a/cucumber/features/steps_definitions/general.js b/cucumber/features/steps_definitions/general.js new file mode 100644 index 0000000..33bb272 --- /dev/null +++ b/cucumber/features/steps_definitions/general.js @@ -0,0 +1,20 @@ +/* global module expect require process client */ + +module.exports = function doSteps() { + let pages; + + this.Then(/^I check that exist this list of pages in the sitemap$/, (table, callback) => { + // Write code here that turns the phrase above into concrete actions + pages = table.raw(); + for (let i = 0; i < pages.length; i += 1) { + // TODO download sitemap and parse + // client.waitForText('.text', pages[i][0]); + } + callback(); + }); + + this.Given(/^the page sitemap\.xml$/, (callback) => { + client.url(`${process.env.ROOT_URL}/sitemap.xml`); + callback(); + }); +}; diff --git a/imports/startup/server/index.js b/imports/startup/server/index.js index 8a27f96..aa32e9d 100644 --- a/imports/startup/server/index.js +++ b/imports/startup/server/index.js @@ -8,3 +8,4 @@ import './migrations'; import './notificationsObserver'; import './facts'; import '../common/comments'; +import './sitemaps'; diff --git a/imports/startup/server/sitemaps.js b/imports/startup/server/sitemaps.js new file mode 100644 index 0000000..29a62df --- /dev/null +++ b/imports/startup/server/sitemaps.js @@ -0,0 +1,40 @@ +/* global sitemaps Comments */ +/* eslint-disable import/no-absolute-path */ + +import Fires from '/imports/api/Fires/Fires'; +// import Comments from '/imports/api/Comments/Comments'; + +sitemaps.add('/sitemap.xml', () => { + const today = new Date(); + + const out = []; + out.push({ page: '/fires', lastmod: today }); + out.push({ page: '/login', lastmod: today }); + out.push({ page: '/signup', lastmod: today }); + out.push({ page: '/recover-password', lastmod: today }); + out.push({ page: '/credits', lastmod: today }); + out.push({ page: '/terms', lastmod: today }); + out.push({ page: '/license', lastmod: today }); + out.push({ page: '/privacy', lastmod: today }); + + + // When user has public page + /* const users = Meteor.users.find().fetch(); + _.each(users, function(user) { + out.push({ + page: '/persona/' + user.username, + lastmod: user.updatedAt + }); + }); */ + + Fires.find().fetch().forEach((fire) => { + // Search the last comment of tha fire + const lastComment = Comments.getCollection().findOne({ referenceId: `fire-${fire._id}` }, { sort: { createdAt: -1 } }); + out.push({ + page: `/fire/archive/${fire._id._str}`, + lastmod: lastComment ? lastComment.createdAt : fire.updatedAt + }); + }); + + return out; +});