Skip to content

Commit

Permalink
testing metadata
Browse files Browse the repository at this point in the history
  • Loading branch information
stephenplusplus committed Oct 20, 2015
1 parent 8c19d1a commit 5ba5d81
Show file tree
Hide file tree
Showing 2 changed files with 199 additions and 0 deletions.
167 changes: 167 additions & 0 deletions datastore/metadata.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,167 @@
'use strict';

var gcloud = require('gcloud');

// This mock is used in the documentation snippets.
var datastore = {
runQuery: function() {}
};

function Metadata(projectId) {
this.datastore = gcloud.datastore({
projectId: projectId
});
}

Metadata.prototype.testNamespaceRunQuery = function(callback) {
var self = this;

datastore.createQuery = this.datastore.createQuery;
datastore.key = this.datastore.key;

var startNamespace = 'Animals';
var endNamespace = 'Zoos';

this.datastore.save([
{
key: datastore.key({
namespace: 'Animals',
path: ['Ant', 1]
}),
data: {}
}
], function(err) {
if (err) {
callback(err);
return;
}

// jshint unused:false
// [START namespace_run_query]
var query = datastore.createQuery('__namespace__')
.select('__key__')
.filter('__key__ >=', datastore.key(['__namespace__', startNamespace]))
.filter('__key__ <', datastore.key(['__namespace__', endNamespace]));

datastore.runQuery(query, function(err, entities) {
if (err) {
// An error occurred while running the query.
return;
}

var namespaces = entities.map(function(entity) {
return entity.key.path.pop();
});
});
// [END namespace_run_query]

self.datastore.runQuery(query, callback);
});
};

Metadata.prototype.testKindRunQuery = function(callback) {
datastore.createQuery = this.datastore.createQuery;

// jshint unused:false
// [START kind_run_query]
var query = datastore.createQuery('__kind__')
.select('__key__');

datastore.runQuery(query, function(err, entities) {
if (err) {
// An error occurred while running the query.
return;
}

var kinds = entities.map(function(entity) {
return entity.key.path.pop();
});
});
// [END kind_run_query]

this.datastore.runQuery(query, callback);
};

Metadata.prototype.testPropertyRunQuery = function(callback) {
datastore.createQuery = this.datastore.createQuery;

// [START property_run_query]
var query = datastore.createQuery('__property__')
.select('__key__');

datastore.runQuery(query, function(err, entities) {
if (err) {
// An error occurred while running the query.
return;
}

var propertiesByKind = {};

entities.forEach(function(entity) {
var kind = entity.key.path[1];
var propertyName = entity.key.path[3];

propertiesByKind[kind] = propertiesByKind[kind] || [];
propertiesByKind[kind].push(propertyName);
});

// propertiesByKind = {
// Task: [
// 'collaborators',
// 'created',
// 'description',
// 'done',
// 'percent_complete',
// 'priority',
// 'tags',
// 'type'
// ]
// }
});
// [END property_run_query]

this.datastore.runQuery(query, callback);
};

Metadata.prototype.testPropertyByKindRunQuery = function(callback) {
var datastore = this.datastore;

// jshint camelcase:false
// [START property_by_kind_run_query]
var ancestorKey = datastore.key(['__kind__', 'Task']);

var query = datastore.createQuery('__property__')
.hasAncestor(ancestorKey);

datastore.runQuery(query, function(err, entities) {
if (err) {
// An error occurred while running the query.
return;
}

var representationsByProperty = {};

entities.forEach(function(entity) {
var propertyName = entity.key.path.pop();
var propertyType = entity.data.property_representation;

representationsByProperty[propertyName] = propertyType;
});

// representationsByProperty = {
// collaborators: [ 'STRING' ],
// created: [ 'INT64' ],
// description: [ 'STRING' ],
// done: [ 'BOOLEAN' ],
// percent_complete: [ 'INT64' ],
// priority: [ 'INT64' ],
// tags: [ 'STRING' ],
// type: [ 'STRING' ]
// }
});
// [END property_by_kind_run_query]

this.datastore.runQuery(query, callback);
};

module.exports = Metadata;
32 changes: 32 additions & 0 deletions test/datastore/testMetadata.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
'use strict';

var Metadata = require('../../datastore/metadata');
var metadata;

before(function() {
metadata = new Metadata(process.env.TEST_PROJECT_ID);
});

describe('namespace query', function() {
it('performs a namespace query', function(done) {
metadata.testNamespaceRunQuery(done);
});
});

describe('kinds query', function() {
it('performs a kind query', function(done) {
metadata.testKindRunQuery(done);
});
});

describe('property query', function() {
it('performs a property query', function(done) {
metadata.testPropertyRunQuery(done);
});
});

describe('property by kind query', function() {
it('performs a property by kind query', function(done) {
metadata.testPropertyByKindRunQuery(done);
});
});

0 comments on commit 5ba5d81

Please sign in to comment.