apostrophe-site-map
Version:
Generate site maps for sites powered by the Apostrophe CMS.
165 lines (154 loc) • 4.49 kB
JavaScript
var assert = require('assert');
var _ = require('@sailshq/lodash');
var async = require('async');
var request = require('request');
var fs = require('fs');
const get = require('./lib/get');
describe('Apostrophe Sitemap: simple site without workflow', function() {
var apos;
this.timeout(5000);
after(function(done) {
try {
require('apostrophe/test-lib/util').destroy(apos, done);
} catch (e) {
console.warn('Old version of apostrophe does not export test-lib/util library, just dropping old test db');
apos.db.dropDatabase();
setTimeout(done, 1000);
}
});
it('should be a property of the apos object', function(done) {
apos = require('apostrophe')({
testModule: true,
baseUrl: 'http://localhost:7780',
modules: {
'apostrophe-express': {
port: 7780
},
'apostrophe-site-map': {
},
'apostrophe-pages': {
park: [
{
title: 'Tab One',
type: 'default',
slug: '/tab-one',
_children: [
{
title: 'Tab One Child One',
type: 'default',
slug: '/tab-one/child-one'
},
{
title: 'Tab One Child Two',
type: 'default',
slug: '/tab-one/child-two'
},
]
},
{
title: 'Tab Two',
type: 'default',
slug: '/tab-two',
_children: [
{
title: 'Tab Two Child One',
type: 'default',
slug: '/tab-two/child-one'
},
{
title: 'Tab Two Child Two',
type: 'default',
slug: '/tab-two/child-two'
},
]
},
{
title: 'Products',
type: 'products-page',
slug: '/products'
}
],
types: [
{
name: 'home',
label: 'Home'
},
{
name: 'default',
label: 'Default'
},
{
name: 'products',
label: 'Products'
}
]
},
'products': {
extend: 'apostrophe-pieces',
name: 'product'
},
'products-pages': {
extend: 'apostrophe-pieces-pages'
},
},
afterInit: function(callback) {
assert(apos.modules['apostrophe-site-map']);
return callback(null);
},
afterListen: function(err) {
done();
}
});
});
it('insert a product for test purposes', function(done) {
var product = _.assign(apos.modules.products.newInstance(), {
title: 'Cheese',
slug: 'cheese'
});
apos.modules.products.insert(apos.tasks.getReq(), product, function(err) {
assert(!err);
done();
});
});
it('make sure everything is published and out of the trash for test purposes', function(done) {
return apos.docs.db.update({}, {
$set: {
trash: false,
published: true
}
}, {
multi: true
}, function(err, count) {
assert(!err);
done();
});
});
it('insert an unpublished product for test purposes', function(done) {
var product = _.assign(apos.modules.products.newInstance(), {
title: 'Rocks',
slug: 'rocks',
published: false
});
apos.modules.products.insert(apos.tasks.getReq(), product, function(err) {
assert(!err);
done();
});
});
it('should generate a suitable sitemap', function(done) {
this.timeout(10000);
get('http://localhost:7780/sitemap.xml', function(err, xml) {
if (err) {
console.error(err);
}
assert(!err);
assert(xml);
assert(xml.indexOf('<loc>http://localhost:7780/</loc>') !== -1);
assert(xml.indexOf('<loc>http://localhost:7780/tab-one</loc>') !== -1);
assert(xml.indexOf('<loc>http://localhost:7780/tab-two</loc>') !== -1);
assert(xml.indexOf('<loc>http://localhost:7780/tab-one/child-one</loc>') !== -1);
assert(xml.indexOf('<loc>http://localhost:7780/products/cheese</loc>') !== -1);
assert(xml.indexOf('<loc>http://localhost:7780/products/rocks</loc>') === -1);
done();
});
});
});