OpenSocial のスペック読み解き。。。
行間というか、Shinding実装間を読まないと、結局Shindigのがアテにならなくて、ほとんど一から実装という罠。
[ {"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がセットできていない。
なんでやねん、と思ってshindigのjavascriptを見たら、"userId": ["A"] というパラメーターに対して ["Aのデータ"] を返すのではなく "Aのデータ" を返してもらうことを期待するような実装になっていた。つまり、上記の data を配列ではなく、オブジェクトとして返すようにすればいいらしい。。。
いやいや、おいおい、と思ってShindig側を見てみる。真の原因は、OpenSocialTestRunner.prototype.setupTests で、
req.add(req.newFetchPersonRequest('VIEWER'), 'viewer');
を呼び出して、Viewerなどを取得しているんだけれど、これに対してShindigが "userId" : "@viewer" ではなく、"userId" : ["@viewer"] をリクエストするのが悪いと思うんだ。