[Groonga-commit] groonga/gcs [master] Add support for DescribeSynonymOptions action

Back to archive index

SHIMODA Hiroshi null+****@clear*****
Wed Aug 15 12:49:37 JST 2012


SHIMODA Hiroshi	2012-08-15 12:49:37 +0900 (Wed, 15 Aug 2012)

  New Revision: f13d33b930d0210069cc52a8f369aba607bf5a0c
  https://github.com/groonga/gcs/commit/f13d33b930d0210069cc52a8f369aba607bf5a0c

  Log:
    Add support for DescribeSynonymOptions action

  Modified files:
    lib/api/2011-02-01/configuration.js
    test/api-configuration.test.js

  Modified: lib/api/2011-02-01/configuration.js (+36 -0)
===================================================================
--- lib/api/2011-02-01/configuration.js    2012-08-15 12:43:40 +0900 (55b06dc)
+++ lib/api/2011-02-01/configuration.js    2012-08-15 12:49:37 +0900 (d36481a)
@@ -461,6 +461,42 @@ handlers.UpdateSynonymOptions = function(context, request, response) {
   }
 };
 
+function createDescribeSynonymOptionsResponse(options) {
+  var doc = xmlbuilder.create();
+  doc.begin('DescribeSynonymOptionsResponse', { version: '1.0' })
+    .attribute('xmlns', XMLNS)
+    .element('DescribeSynonymOptionsResult')
+      .importXMLBuilder(createSynonymOptionsStatus(options))
+    .up()
+    .element('ResponseMetadata')
+      .element('RequestId').text(options.requestId || '').up()
+    .up();
+  return doc.toString();
+}
+
+handlers.DescribeSynonymOptions = function(context, request, response) {
+  var domain = new Domain(request.query.DomainName, context);
+  try {
+    var synonyms = domain.getSynonymsSync();
+    var synonymOptions = { synonyms: synonyms };
+
+    var updatedAt = new Date();
+
+    domain.updateSynonymsSync(synonymOptions.synonyms);
+
+    response.send(createUpdateSynonymOptionsResponse({
+      synonymOptions: JSON.stringify(synonymOptions),
+      updatedAt: updatedAt,
+      createdAt: updatedAt
+    }));
+  } catch (error) {
+    var body = createCommonErrorResponse('InternalFailure',
+                                         (error.message || error).toString());
+    response.contentType('application/xml');
+    response.send(body, 400);
+  }
+};
+
 function createDefaultSearchFieldStatus(options) {
   var defaultSearchFieldStatus = xmlbuilder.create();
   defaultSearchFieldStatus.begin('DefaultSearchField', { version: '1.0' })

  Modified: test/api-configuration.test.js (+76 -4)
===================================================================
--- test/api-configuration.test.js    2012-08-15 12:43:40 +0900 (87242bc)
+++ test/api-configuration.test.js    2012-08-15 12:49:37 +0900 (702d34e)
@@ -183,14 +183,26 @@ function PATTERN_IndexDocumentsResponse(members) {
   };
 }
 
+var PATTERN_SynonymOptionsStatus = {
+      Options: '',
+      Status: PATTERN_OptionStatus
+    };
+
 var PATTERN_UpdateSynonymOptionsResponse = {
       UpdateSynonymOptionsResponse: {
         '@': { xmlns: '' },
         UpdateSynonymOptionsResult: {
-          Synonyms: {
-            Options: '',
-            Status: PATTERN_OptionStatus
-          },
+          Synonyms: PATTERN_SynonymOptionsStatus,
+        },
+        ResponseMetadata: PATTERN_ResponseMetadata
+      }
+    };
+
+var PATTERN_DescribeSynonymOptionsResponse = {
+      DescribeSynonymOptionsResponse: {
+        '@': { xmlns: '' },
+        DescribeSynonymOptionsResult: {
+          Synonyms: PATTERN_SynonymOptionsStatus,
         },
         ResponseMetadata: PATTERN_ResponseMetadata
       }
@@ -932,6 +944,66 @@ suite('Configuration API', function() {
       });
   });
 
+  test('Get, Action=DescribeSynonymOptions', function(done) {
+    var domain;
+    var synonymsObject = {
+      synonyms: {
+        tokio: ["tokyo"],
+        dekkaido: "hokkaido"
+      }
+    };
+    var json = JSON.stringify(synonymsObject);
+    var synonyms = encodeURIComponent(json);
+    utils
+      .get('/?DomainName=companies&Action=CreateDomain&Version=2011-02-01', {
+        'Host': 'cloudsearch.localhost'
+      })
+      .get('/?Version=2011-02-01&Action=DescribeSynonymOptions&' +
+           'DomainName=companies')
+      .next(function() {
+        response = toParsedResponse(response);
+        assert.deepEqual(response.pattern,
+                         { statusCode: 200,
+                           body: PATTERN_DescribeSynonymOptionsResponse });
+
+        var synonymOptions = response.body.DescribeSynonymOptionsResponse
+                                          .DescribeSynonymOptionsResult
+                                          .Synonyms.Options;
+        synonymOptions = JSON.parse(synonymOptions);
+        var expectedSynonymOptions = {
+              synonyms: {}
+            };
+        assert.deepEqual(expectedSynonymOptions, synonymOptions);
+      })
+      .get('/?Version=2011-02-01&Action=UpdateSynonymOptions&' +
+           'DomainName=companies&Synonyms='+synonyms)
+      .get('/?Version=2011-02-01&Action=DescribeSynonymOptions&' +
+           'DomainName=companies')
+      .next(function(response) {
+        response = toParsedResponse(response);
+        assert.deepEqual(response.pattern,
+                         { statusCode: 200,
+                           body: PATTERN_DescribeSynonymOptionsResponse });
+
+        var synonymOptions = response.body.DescribeSynonymOptionsResponse
+                                          .DescribeSynonymOptionsResult
+                                          .Synonyms.Options;
+        synonymOptions = JSON.parse(synonymOptions);
+        var expectedSynonymOptions = {
+              synonyms: {
+                tokio: ['tokyo'],
+                dekkaido: 'hokkaido'
+              }
+            };
+        assert.deepEqual(expectedSynonymOptions, synonymOptions);
+
+        done();
+      })
+      .error(function(error) {
+        done(error);
+      });
+  });
+
   test('Get, Action=UpdateDefaultSearchField', function(done) {
     var domain;
     utils
-------------- next part --------------
HTML����������������������������...
Download 



More information about the Groonga-commit mailing list
Back to archive index