Navigation Menu

Skip to content

Commit

Permalink
Move tests for database modifications around index field to a separat…
Browse files Browse the repository at this point in the history
…e file
  • Loading branch information
piroor committed Aug 2, 2012
1 parent a8f2602 commit bbcb4ea
Show file tree
Hide file tree
Showing 3 changed files with 181 additions and 50 deletions.
4 changes: 4 additions & 0 deletions lib/database/index-field.js
Expand Up @@ -237,6 +237,10 @@ IndexField.prototype = {
source: this.columnName
});
}
},

exists: function() {
return !!this.column;
}
};

Expand Down
70 changes: 21 additions & 49 deletions test/api-configuration.test.js
Expand Up @@ -321,29 +321,21 @@ suite('Configuration API', function() {
'IndexField.IndexFieldType=text&' +
'Action=DefineIndexField&Version=2011-02-01')
.next(function(response) {
var dump = context.commandSync('dump', {
tables: 'companies'
});
var expected = 'table_create companies_00000000000000000000000000 TABLE_HASH_KEY ShortText\n' +
'column_create companies_00000000000000000000000000 name COLUMN_SCALAR ShortText\n' +
'table_create companies_00000000000000000000000000_BigramTerms ' +
'TABLE_PAT_KEY|KEY_NORMALIZE ShortText ' +
'--default_tokenizer TokenBigram\n' +
'column_create companies_00000000000000000000000000_BigramTerms companies_00000000000000000000000000_name ' +
'COLUMN_INDEX|WITH_POSITION companies_00000000000000000000000000 name';
assert.equal(dump, expected);
var domain = new Domain('companies', context);
var field = domain.getIndexField('name');
assert.isTrue(field.exists());

response = toParsedResponse(response);
assert.deepEqual(response.pattern,
{ statusCode: 200,
body: PATTERN_DefineIndexFieldResponse_Text });
var expectedOptions = {
IndexFieldName: 'name',
IndexFieldType: 'text',
IndexFieldName: field.name,
IndexFieldType: field.type,
TextOptions: {
DefaultValue: {},
FacetEnabled: 'false',
ResultEnabled: 'true'
FacetEnabled: String(field.facetEnabled),
ResultEnabled: String(field.fresultEnabled)
}
};
var options = response.body.DefineIndexFieldResponse.DefineIndexFieldResult.IndexField.Options;
Expand All @@ -365,27 +357,17 @@ suite('Configuration API', function() {
'IndexField.IndexFieldType=uint&' +
'Action=DefineIndexField&Version=2011-02-01')
.next(function(response) {
var dump = context.commandSync('dump', {
tables: 'companies'
});
var expected = 'table_create companies_00000000000000000000000000 TABLE_HASH_KEY ShortText\n' +
'column_create companies_00000000000000000000000000 age COLUMN_SCALAR UInt32\n' +
'table_create companies_00000000000000000000000000_BigramTerms ' +
'TABLE_PAT_KEY|KEY_NORMALIZE ShortText ' +
'--default_tokenizer TokenBigram\n' +
'table_create companies_00000000000000000000000000_age ' +
'TABLE_HASH_KEY UInt32\n' +
'column_create companies_00000000000000000000000000_age companies_00000000000000000000000000_age ' +
'COLUMN_INDEX|WITH_POSITION companies_00000000000000000000000000 age';
assert.equal(dump, expected);
var domain = new Domain('companies', context);
var field = domain.getIndexField('age');
assert.isTrue(field.exists());

response = toParsedResponse(response);
assert.deepEqual(response.pattern,
{ statusCode: 200,
body: PATTERN_DefineIndexFieldResponse_UInt });
var expectedOptions = {
IndexFieldName: 'age',
IndexFieldType: 'uint',
IndexFieldName: field.name,
IndexFieldType: field.type,
UIntOptions: {
DefaultValue: {}
}
Expand All @@ -405,36 +387,26 @@ suite('Configuration API', function() {
.get('/?DomainName=companies&Action=CreateDomain&Version=2011-02-01', {
'Host': 'cloudsearch.localhost'
})
.get('/?DomainName=companies&IndexField.IndexFieldName=member&' +
.get('/?DomainName=companies&IndexField.IndexFieldName=product&' +
'IndexField.IndexFieldType=literal&' +
'Action=DefineIndexField&Version=2011-02-01')
.next(function(response) {
var dump = context.commandSync('dump', {
tables: 'companies'
});
var expected = 'table_create companies_00000000000000000000000000 TABLE_HASH_KEY ShortText\n' +
'table_create companies_00000000000000000000000000_BigramTerms ' +
'TABLE_PAT_KEY|KEY_NORMALIZE ShortText ' +
'--default_tokenizer TokenBigram\n' +
'table_create companies_00000000000000000000000000_member ' +
'TABLE_HASH_KEY ShortText\n' +
'column_create companies_00000000000000000000000000_member companies_00000000000000000000000000_member ' +
'COLUMN_INDEX|WITH_POSITION companies_00000000000000000000000000 member\n' +
'column_create companies_00000000000000000000000000 member COLUMN_SCALAR companies_00000000000000000000000000_member';
assert.equal(dump, expected);
var domain = new Domain('companies', context);
var field = domain.getIndexField('product');
assert.isTrue(field.exists());

response = toParsedResponse(response);
assert.deepEqual(response.pattern,
{ statusCode: 200,
body: PATTERN_DefineIndexFieldResponse_Literal });
var expectedOptions = {
IndexFieldName: 'member',
IndexFieldType: 'literal',
IndexFieldName: field.name,
IndexFieldType: field.type,
LiteralOptions: {
DefaultValue: {},
FacetEnabled: 'true',
ResultEnabled: 'true',
SearchEnabled: 'true'
FacetEnabled: String(field.facetEnabled),
ResultEnabled: String(field.fresultEnabled),
SearchEnabled: String(field.searchEnabled)
}
};
var options = response.body.DefineIndexFieldResponse.DefineIndexFieldResult.IndexField.Options;
Expand Down
157 changes: 156 additions & 1 deletion test/database-index-field.test.js
Expand Up @@ -147,7 +147,6 @@ suite('database', function() {
context = temporaryDatabase.get();
utils.loadDumpFile(context, __dirname + '/fixture/companies/ddl.grn');
domain = new Domain('companies', context);
domain.id = Domain.DEFAULT_ID;
});

teardown(function() {
Expand All @@ -156,6 +155,16 @@ suite('database', function() {
temporaryDatabase = undefined;
});

test('exists, for existing field', function() {
var field = new IndexField('name', domain);
assert.isTrue(field.exists());
});

test('exists, for non-existing field', function() {
var field = new IndexField('unknown', domain);
assert.isTrue(field.exists());
});

test('type detection (text)', function() {
var field = new IndexField('name', domain);
assert.equal(field.type, 'text');
Expand All @@ -171,5 +180,151 @@ suite('database', function() {
assert.equal(field.type, 'literal');
});
});

suite('database modifications', function() {
var temporaryDatabase;
var context;
var domain;

setup(function() {
temporaryDatabase = utils.createTemporaryDatabase();
context = temporaryDatabase.get();
domain = new Domain('companies', context);
domain.createSync();
});

teardown(function() {
temporaryDatabase.teardown();
temporaryDatabase = undefined;
});

function getNoColumnDump() {
return 'table_create ' + domain.tableName + ' TABLE_HASH_KEY ShortText\n' +
'table_create ' + domain.termsTableName + ' ' +
'TABLE_PAT_KEY|KEY_NORMALIZE ShortText ' +
'--default_tokenizer TokenBigram';
}

test('createSync for text field', function() {
var field = new IndexField('name', domain);
assert.isFalse(field.exists());

field.type = 'text';
assert.isFalse(field.exists());

field.createSync();
assert.isTrue(field.exists());

var dump = context.commandSync('dump', {
tables: domain.tableName
});
var expected = 'table_create ' + domain.tableName + ' TABLE_HASH_KEY ShortText\n' +
'column_create ' + domain.tableName + ' ' + field.columnName + ' COLUMN_SCALAR ShortText\n' +
'table_create ' + domain.termsTableName + ' ' +
'TABLE_PAT_KEY|KEY_NORMALIZE ShortText ' +
'--default_tokenizer TokenBigram\n' +
'column_create ' + domain.termsTableName + ' ' + field.indexColumnName + ' ' +
'COLUMN_INDEX|WITH_POSITION ' + domain.tableName + ' ' + field.columnName;
assert.equal(dump, expected);
});

test('deleteSync for text field', function() {
var field = new IndexField('name', domain);
field.type = 'text';
field.createSync();
assert.isTrue(field.exists());

field.deleteSync();
assert.isFalse(field.exists());

var dump = context.commandSync('dump', {
tables: domain.tableName
});
var expected = getNoColumnDump();
assert.equal(dump, expected);
});

test('createSync for uint field', function() {
var field = new IndexField('age', domain);
assert.isFalse(field.exists());

field.type = 'uint';
assert.isFalse(field.exists());

field.createSync();
assert.isTrue(field.exists());

var dump = context.commandSync('dump', {
tables: domain.tableName
});
var expected = 'table_create ' + domain.tableName + ' TABLE_HASH_KEY ShortText\n' +
'column_create ' + domain.tableName + ' ' + field.columnName + ' COLUMN_SCALAR UInt32\n' +
'table_create ' + domain.termsTableName + ' ' +
'TABLE_PAT_KEY|KEY_NORMALIZE ShortText ' +
'--default_tokenizer TokenBigram\n' +
'table_create ' + field.alterTableName + ' ' +
'TABLE_HASH_KEY UInt32\n' +
'column_create ' + field.alterTableName + ' ' + field.indexColumnName + ' ' +
'COLUMN_INDEX|WITH_POSITION ' + domain.tableName + ' ' + field.columnName;
assert.equal(dump, expected);
});

test('deleteSync for uint field', function() {
var field = new IndexField('age', domain);
field.type = 'uint';
field.createSync();
assert.isTrue(field.exists());

field.deleteSync();
assert.isFalse(field.exists());

var dump = context.commandSync('dump', {
tables: domain.tableName
});
var expected = getNoColumnDump();
assert.equal(dump, expected);
});

test('createSync for literal field', function() {
var field = new IndexField('product', domain);
assert.isFalse(field.exists());

field.type = 'literal';
assert.isFalse(field.exists());

field.createSync();
assert.isTrue(field.exists());

var dump = context.commandSync('dump', {
tables: 'companies'
});
var expected = 'table_create ' + domain.tableName + ' TABLE_HASH_KEY ShortText\n' +
'table_create ' + domain.termsTableName + ' ' +
'TABLE_PAT_KEY|KEY_NORMALIZE ShortText ' +
'--default_tokenizer TokenBigram\n' +
'table_create ' + field.alterTableName + ' ' +
'TABLE_HASH_KEY ShortText\n' +
'column_create ' + field.alterTableName + ' ' + field.indexColumnName + ' ' +
'COLUMN_INDEX|WITH_POSITION ' + domain.tableName + ' ' + field.columnName + '\n' +
'column_create ' + domain.tableName + ' ' + field.columnName + ' COLUMN_SCALAR ' + field.alterTableName;
assert.equal(dump, expected);
});

test('deleteSync for literal field', function() {
var field = new IndexField('product', domain);
field.type = 'literal';
field.createSync();
assert.isTrue(field.exists());

field.deleteSync();
assert.isFalse(field.exists());

var dump = context.commandSync('dump', {
tables: domain.tableName
});
var expected = getNoColumnDump();
assert.equal(dump, expected);
});
});
});
});

0 comments on commit bbcb4ea

Please sign in to comment.