OpenSocial のスペック読み解き。。。

行間というか、Shinding実装間を読まないと、結局Shindigのがアテにならなくて、ほとんど一から実装という罠。


こんな感じでJSON-RPCのリクエストとばします。

[
  {"method":"people.get","params":
      {"userId":["@viewer"],"groupId":"@self",
       "fields":["id","name","thumbnailUrl","id","displayName"]},
   "id":"viewer"}
]

で、ひとまず実装した戻りは以下。

[
 {"id":"viewer",
  "data":[{"name":{"formatted":"Administrator"},
            "displayName":{"formatted":"Yohei Sasaki"},
            "type":"Person",
            "_rev":"2-2548614665",
            "_id":"example.org:yssk22","id":"example.org:yssk22","gender":"male",
            "anniversary":"1990-01-01",
            "is_test_fixture":true,
            "birthday":"1980-01-01",
            "_deleted_conflicts":[]
           }]
}]

これだとspec test suite に通らない。というかテスト環境の初期化の時点で、suiteを実行するViewer, Ownerがセットできていない。

なんでやねん、と思ってshindigjavascriptを見たら、"userId": ["A"] というパラメーターに対して ["Aのデータ"] を返すのではなく "Aのデータ" を返してもらうことを期待するような実装になっていた。つまり、上記の data を配列ではなく、オブジェクトとして返すようにすればいいらしい。。。

いやいや、おいおい、と思ってShindig側を見てみる。真の原因は、OpenSocialTestRunner.prototype.setupTests で、

  req.add(req.newFetchPersonRequest('VIEWER'), 'viewer');

を呼び出して、Viewerなどを取得しているんだけれど、これに対してShindigが "userId" : "@viewer" ではなく、"userId" : ["@viewer"] をリクエストするのが悪いと思うんだ。