/**
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
* @fileoverview Appdata, viewer/owner/viewer friends/owner friends related
* data requests tests.
* These tests depends on framework
* http://opensocial-resources.googlecode.com/svn/tests/trunk/common/
*
* 1) person requests: PPL000
* - 1.1 newFetchPersonRequest VIEWER PPL000
* - 1.2 newFetchPersonRequest OWNER PPL100
* - 1.3 newFetchPersonRequest otherID PPL200
* - 1.4 newFetchPersonRequest error handling PPL300
* - newFetchPersonRequest misc PPL400
* 2) people requests: PPL500 and up
* - 2.1 newFetchPeopleRequest VIEWER_FRIENDS PPL500
* - 2.2 newFetchPeopleRequest OWNER_FRIENDS PPL600
* - 2.3 newFetchPeopleRequest other IDS PPL700
* - 2.4 newFetchPeopleRequest error handling PPL800
* - 2.5 newFetchPeopleRequest MISC PPL900
*
*/
function PeopleSuite0_8() {
this.name = 'People/Person Requests Test Suite';
this.id = 'PPL';
this.tests = [
{ name: 'newFetchPersonRequest - VIEWER/OWNER (no parameters)',
id: 'PPLX00',
priority: Test.PRIORITY.P0,
description: 'Test if you can retrieve profile of VIEWER/OWNER.',
run: function(context, callback, result) {
var ids = [ 'VIEWER', 'OWNER' ];
PeopleSuite0_8.counter['PPL000'] = ids.length;
for (var i = 0; i < ids.length; i++) {
var req = opensocial.newDataRequest();
req.add(req.newFetchPersonRequest(ids[i]), 'viewer');
req.send(function(dataResponse) {
if (context.isViewerWithoutApp()) {
Assert.assertDataResponseHadError(dataResponse, result,
['viewer'], true);
} else {
Assert.assertDataResponseHadError(dataResponse, result,
['viewer'], false);
if (!dataResponse.hadError()) {
var viewerData = dataResponse.get('viewer').getData();
for (var field in opensocial.Person.Field) {
try {
var fieldValue =
viewerData.getField(opensocial.Person.Field[field]);
if(fieldValue != null) {
Helper.addSubResult(result, 'Field: ' + field,
Assert.assertNotNull, fieldValue, 'Some Value');
} else if (opensocial.getEnvironment().supportsField(
opensocial.Environment.ObjectType.PERSON,
opensocial.Person.Field[field])) {
Helper.addSubResult(result,
'Empty field - ' + field,
Assert.assertDataEmpty, fieldValue, 'null');
} else {
Helper.addSubResult(result,
'Container non-supported field - ' + field,
Assert.assertDataEmpty, fieldValue, 'null');
}
} catch (ex) {
Helper.addSubResult(result, 'Field:' + field,
Assert.assertEquals, ex,
'No Exception');
}
}
}
}
PeopleSuite0_8.counter['PPL000']--;
if (PeopleSuite0_8.counter['PPL000'] == 0) {
callback(result);
}
});
}
}
},
{ name: 'newFetchPersonRequest - VIEWER/OWNER (all person fields)',
id : 'PPLX01',
priority: Test.PRIORITY.P0,
description: 'Test if view all parameters of ' +
'opensocial.Person.Field for VIEWER/OWNER profile.',
run: function(context, callback, result) {
var ids = [ 'VIEWER', 'OWNER' ];
PeopleSuite0_8.counter['PPL001'] = ids.length;
for (var i = 0; i < ids.length; i++) {
var params = {};
params[ opensocial.DataRequest.PeopleRequestFields.PROFILE_DETAILS ] =
context.getData().personFields;
var req = opensocial.newDataRequest();
req.add(req.newFetchPersonRequest(ids[i], params), 'viewer');
req.send(function(dataResponse) {
if (context.isViewerWithoutApp()) {
Assert.assertDataResponseHadError(dataResponse, result,
['viewer'], true);
} else {
Assert.assertDataResponseHadError(dataResponse, result, null,
false);
if (!dataResponse.hadError()) {
var viewerData = dataResponse.get('viewer').getData();
for (var field in opensocial.Person.Field) {
try {
var fieldValue =
viewerData.getField(opensocial.Person.Field[field]);
if(fieldValue != null) {
Helper.addSubResult(result, 'Field: ' + field,
Assert.assertNotNull, fieldValue, 'Some Value');
} else if (opensocial.getEnvironment().supportsField(
opensocial.Environment.ObjectType.PERSON,
opensocial.Person.Field[field])) {
Helper.addSubResult(result,
'Empty field - ' + field,
Assert.assertDataEmpty, fieldValue, 'null');
} else {
Helper.addSubResult(result,
'Container non-supported field - ' + field,
Assert.assertDataEmpty, fieldValue, 'null');
}
} catch (ex) {
Helper.addSubResult(result, 'Field:' + field,
Assert.assertEquals, ex,
'No Exception');
}
}
}
}
PeopleSuite0_8.counter['PPL001']--;
if (PeopleSuite0_8.counter['PPL001'] == 0) {
callback(result);
}
});
}
}
},
{ name: 'opensocial.hasPermission(VIEWER)',
id: 'PPLX02',
bugs: ['1046794'],
priority: Test.PRIORITY.P0,
description: 'Test if gadget has permission as VIEWER',
run: function(context, callback, result) {
var hasViewerPermission;
try {
hasViewerPermission = opensocial.hasPermission(
opensocial.Permission.VIEWER);
result.addSubResult('opensocial.hasPermission', Assert.assertNotNull,
hasViewerPermission, 'Some value');
} catch (ex) {
var stacktrace = ex.stack || '';
var exception = 'Exception: ' + ex.name +
' - File: ' + ex.fileName +
' - Line:(' + ex.lineNumber + ') - Msg:' +
ex.message + '\nStacktrace: ' + stacktrace;
result.addSubResult('opensocial.hasPermission',
Assert.fail, exception, 'No Exception');
}
callback(result);
}
},
{ name: 'opensocial.requestPermission(opensocial.Permission.VIEWER, reason,'
+ 'callback)',
id : 'PPLX03',
priority: Test.PRIORITY.P2,
description: 'Test if you can call requestPermission for VIEWER for ' +
'test reason',
run: function(context, callback, result) {
opensocial.requestPermission(opensocial.Permission.VIEWER, 'test',
function(dataResponse) {
Helper.addSubResult(result,
'dataResponse instanceof opensocial.ResponseItem',
Assert.assertTrue,
dataResponse instanceof opensocial.ResponseItem, true);
callback(result);
});
}
},
{ name: 'opensocial.requestShareApp(' +
'VIEWER/VIEWER_FRIENDS/OWNER/OWNER_FRIENDS, reason, callback)',
id : 'PPLX04',
priority: Test.PRIORITY.P2,
description: 'Test if you can call requestPermission for VIEWER for ' +
'test reason',
run: function(context, callback, result) {
var ids = [ 'VIEWER', 'OWNER', 'VIEWER_FRIENDS', 'OWNER_FRIENDS' ];
for (var i = 0; i < ids.length; i++) {
opensocial.requestShareApp(ids[i], 'test', function(dataResponse) {
Helper.addSubResult(result,
'dataResponse instanceof opensocial.ResponseItem',
Assert.assertTrue,
dataResponse instanceof opensocial.ResponseItem, true);
});
}
callback(result);
}
},
/************************************
* 1.1 newFetchPersonRequest - VIEWER
************************************/
// PeopleRequestFields - profileDetail
{ name: 'newFetchPersonRequest - VIEWER (profile_details: addresses)',
id: 'PPL003',
priority: Test.PRIORITY.P2,
description: 'Test if you can view address details of VIEWER profile.',
bugs: ['1027335'],
run: function(context, callback, result) {
var req = opensocial.newDataRequest();
if (opensocial.getEnvironment().supportsField(
opensocial.Environment.ObjectType.PERSON,
opensocial.Person.Field.ADDRESSES)) {
var params = {};
params[opensocial.DataRequest.PeopleRequestFields.PROFILE_DETAILS] =
[opensocial.Person.Field.ADDRESSES];
req.add(req.newFetchPersonRequest('VIEWER', params), 'viewer');
req.send(function(dataResponse) {
if (context.isViewerWithoutApp()) {
Assert.assertDataResponseHadError(dataResponse, result,
['viewer'], true);
} else {
Assert.assertDataResponseHadError(dataResponse, result,
['viewer'], false);
if (!dataResponse.hadError()) {
var actual = dataResponse.get('viewer').getData().
getField(opensocial.Person.Field.ADDRESSES);
var expectedViewer = context.getExpectedViewer();
var expected = expectedViewer[opensocial.Person.Field.ADDRESSES]
? expectedViewer[opensocial.Person.Field.ADDRESSES]
: undefined;
Assert.assertSupportedObjectFields(result, actual, expected,
context.getData().addressFields,
opensocial.Environment.ObjectType.ADDRESS);
}
}
callback(result);
});
} else {
callback(result);
}
}
},
{ name: 'newFetchPersonRequest - VIEWER (profile_details: urls)',
id: 'PPL004',
priority: Test.PRIORITY.P2,
description: 'Test if you can view URLs information for VIEWER' +
' profile.',
run: function(context, callback, result) {
var req = opensocial.newDataRequest();
if (opensocial.getEnvironment().supportsField(
opensocial.Environment.ObjectType.PERSON,
opensocial.Person.Field.URLS)) {
var params = {};
params[opensocial.DataRequest.PeopleRequestFields.PROFILE_DETAILS] =
[opensocial.Person.Field.URLS];
req.add(req.newFetchPersonRequest('VIEWER', params), 'viewer');
req.send(function(dataResponse) {
if (context.isViewerWithoutApp()) {
Assert.assertDataResponseHadError(dataResponse, result,
['viewer'], true);
} else {
Assert.assertDataResponseHadError(dataResponse, result,
['viewer'], false);
if (!dataResponse.hadError()) {
var actual = dataResponse.get('viewer').getData().
getField(opensocial.Person.Field.URLS);
var expectedViewer = context.getExpectedViewer();
var expected = expectedViewer[opensocial.Person.Field.URLS] ?
expectedViewer[opensocial.Person.Field.URLS] : [];
var outcome = actual && expected ?
(Assert.assertEquals(actual.length, expected.length))
: undefined;
if (!expectedViewer[opensocial.Person.Field.URLS]) {
outcome = actual.length > 0;
}
Helper.addSubResult(result, 'urls.length',
Assert.assertNotEmpty, 'length should match', outcome);
Assert.assertSupportedObjectFields(result, actual, expected,
context.getData().urlFields,
opensocial.Environment.ObjectType.URL);
}
}
callback(result);
});
} else {
callback(result);
}
}
},
{ name: 'newFetchPersonRequest - VIEWER (profile_details: name)',
id: 'PPL005',
priority: Test.PRIORITY.P2,
description: 'Test if you can view NAME of VIEWER profile.',
run: function(context, callback, result) {
var req = opensocial.newDataRequest();
if (opensocial.getEnvironment().supportsField(
opensocial.Environment.ObjectType.PERSON,
opensocial.Person.Field.NAME)) {
var params = {};
params[opensocial.DataRequest.PeopleRequestFields.PROFILE_DETAILS] =
[opensocial.Person.Field.NAME];
req.add(req.newFetchPersonRequest('VIEWER', params), 'viewer');
req.send(function(dataResponse) {
if (context.isViewerWithoutApp()) {
Assert.assertDataResponseHadError(dataResponse, result,
['viewer'], true);
} else {
Assert.assertDataResponseHadError(dataResponse, result,
['viewer'], false);
if (!dataResponse.hadError()) {
var actual = dataResponse.get('viewer').getData().
getField(opensocial.Person.Field.NAME);
var expected = context.getExpectedViewer()
[opensocial.Person.Field.NAME];
Assert.assertSupportedObjectFields(result, [actual], [expected],
context.getData().nameFields,
opensocial.Environment.ObjectType.NAME);
}
}
callback(result);
});
} else {
callback(result);
}
}
},
{ name: 'newFetchPersonRequest - VIEWER (profile_details: currentLocation)',
id: 'PPL006',
bugs: ['1027335'],
priority: Test.PRIORITY.P2,
description: 'Test if you can view CURRENT_LOCATION of VIEWER profile.',
run: function(context, callback, result) {
var req = opensocial.newDataRequest();
if (opensocial.getEnvironment().supportsField(
opensocial.Environment.ObjectType.PERSON,
opensocial.Person.Field.CURRENT_LOCATION)) {
var params = {};
params[opensocial.DataRequest.PeopleRequestFields.PROFILE_DETAILS] =
[opensocial.Person.Field.CURRENT_LOCATION];
req.add(req.newFetchPersonRequest('VIEWER', params), 'viewer');
req.send(function(dataResponse) {
if (context.isViewerWithoutApp()) {
Assert.assertDataResponseHadError(dataResponse, result,
['viewer'], true);
} else {
Assert.assertDataResponseHadError(dataResponse, result,
['viewer'], false);
if (!dataResponse.hadError()) {
var actual = dataResponse.get('viewer').getData().
getField(opensocial.Person.Field.CURRENT_LOCATION);
var expected = context.getExpectedViewer()
[opensocial.Person.Field.CURRENT_LOCATION];
Assert.assertSupportedObjectFields(result, [actual], [expected],
context.getData().addressFields,
opensocial.Environment.ObjectType.ADDRESS);
}
}
callback(result);
});
} else {
callback(result);
}
}
},
{ name: 'newFetchPersonRequest - VIEWER (profile_details: gender)',
id: 'PPL007',
priority: Test.PRIORITY.P2,
description: 'Test if you can view GENDER details of VIEWER profile.',
run: function(context, callback, result) {
var req = opensocial.newDataRequest();
if (opensocial.getEnvironment().supportsField(
opensocial.Environment.ObjectType.PERSON,
opensocial.Person.Field.GENDER)) {
var params = {};
params[opensocial.DataRequest.PeopleRequestFields.PROFILE_DETAILS] =
[opensocial.Person.Field.GENDER];
req.add(req.newFetchPersonRequest('VIEWER', params), 'viewer');
req.send(function(dataResponse) {
if (context.isViewerWithoutApp()) {
Assert.assertDataResponseHadError(dataResponse, result,
['viewer'], true);
} else {
Assert.assertDataResponseHadError(dataResponse, result,
['viewer'], false);
if (!dataResponse.hadError()) {
var actual =
dataResponse.get('viewer').getData().getField('gender');
Helper.addSubResult(result, 'getKey', Assert.assertNotNull,
actual.getKey(), 'Some value');
Helper.addSubResult(result, 'getDisplayValue',
Assert.assertNotNull, actual.getDisplayValue(),
'Some value');
}
}
callback(result);
});
} else {
callback(result);
}
}
},
{ name: 'newFetchPersonRequest - VIEWER (profile_details: bodyType)',
id: 'PPL008',
priority: Test.PRIORITY.P2,
description: 'Test if you can view BODY_TYPE of VIEWER profile.',
run: function(context, callback, result) {
var req = opensocial.newDataRequest();
if (opensocial.getEnvironment().supportsField(
opensocial.Environment.ObjectType.PERSON,
opensocial.Person.Field.BODY_TYPE)) {
var params = {};
params[opensocial.DataRequest.PeopleRequestFields.PROFILE_DETAILS] =
[opensocial.Person.Field.BODY_TYPE];
req.add(req.newFetchPersonRequest('VIEWER', params), 'viewer');
req.send(function(dataResponse) {
if (context.isViewerWithoutApp()) {
Assert.assertDataResponseHadError(dataResponse, result,
['viewer'], true);
} else {
Assert.assertDataResponseHadError(dataResponse, result,
['viewer'], false);
if (!dataResponse.hadError()) {
var actual = dataResponse.get('viewer').getData().
getField(opensocial.Person.Field.BODY_TYPE);
var expected = context.getExpectedViewer()
[opensocial.Person.Field.BODY_TYPE];
Assert.assertSupportedObjectFields(result, actual, expected,
context.getData().bodyTypeFields,
opensocial.Environment.ObjectType.BODY_TYPE);
}
}
callback(result);
});
} else {
callback(result);
}
}
},
{ name: 'newFetchPersonRequest - VIEWER (profile_details: schools)',
id: 'PPL009',
priority: Test.PRIORITY.P2,
description: 'Test if you can view SCHOOLS of VIEWER profile.',
run: function(context, callback, result) {
var req = opensocial.newDataRequest();
if (opensocial.getEnvironment().supportsField(
opensocial.Environment.ObjectType.PERSON,
opensocial.Person.Field.SCHOOLS)) {
var params = {};
params[opensocial.DataRequest.PeopleRequestFields.PROFILE_DETAILS] =
[opensocial.Person.Field.SCHOOLS];
req.add(req.newFetchPersonRequest('VIEWER', params), 'viewer');
req.send(function(dataResponse) {
if (context.isViewerWithoutApp()) {
Assert.assertDataResponseHadError(dataResponse, result,
['viewer'], true);
} else {
Assert.assertDataResponseHadError(dataResponse, result,
['viewer'], false);
if (!dataResponse.hadError()) {
var actual = dataResponse.get('viewer').getData().
getField(opensocial.Person.Field.SCHOOLS);
var expected = context.getExpectedViewer()['schools'] ?
context.getExpectedOwner()['schools'] : {};
for (var i = 0; i < actual.length; i++) {
Assert.assertObjectEquals('schools', actual,
context.getData().organizationFields, expected[i], result);
}
}
}
callback(result);
});
} else {
callback(result);
}
}
},
/************************************
* 1.2 newFetchPersonRequest - OWNER
************************************/
{ name: 'newFetchPersonRequest - OWNER (profile_details: addresses)',
id: 'PPL104',
bugs: ['1027335'],
priority: Test.PRIORITY.P2,
description: 'Test if you can view address information of OWNER profile',
run: function(context, callback, result) {
var req = opensocial.newDataRequest();
if (opensocial.getEnvironment().supportsField(
opensocial.Environment.ObjectType.PERSON,
opensocial.Person.Field.ADDRESSES)) {
var params = {};
params[opensocial.DataRequest.PeopleRequestFields.PROFILE_DETAILS] =
[opensocial.Person.Field.ADDRESSES];
req.add(req.newFetchPersonRequest('OWNER', params), 'owner');
req.send(function(dataResponse) {
Assert.assertDataResponseHadError(dataResponse, result,
['owner'], false);
if (!dataResponse.hadError()) {
var actual = dataResponse.get('owner').getData()
.getField(opensocial.Person.Field.ADDRESSES);
var expectedOwner = context.getExpectedOwner();
var expected = expectedOwner[opensocial.Person.Field.ADDRESSES] ?
expectedOwner[opensocial.Person.Field.ADDRESSES] : undefined;
Assert.assertSupportedObjectFields(result, actual, expected,
context.getData().addressFields,
opensocial.Environment.ObjectType.ADDRESS);
}
callback(result);
});
} else {
callback(result);
}
}
},
{ name: 'newFetchPersonRequest - OWNER (profile_details: bodyType)',
id: 'PPL105',
priority: Test.PRIORITY.P2,
description: 'Test if you can view BODY_TYPE of OWNER profile',
run: function(context, callback, result) {
var req = opensocial.newDataRequest();
if (opensocial.getEnvironment().supportsField(
opensocial.Environment.ObjectType.PERSON,
opensocial.Person.Field.BODY_TYPE)) {
var params = {};
params[opensocial.DataRequest.PeopleRequestFields.PROFILE_DETAILS] =
[opensocial.Person.Field.BODY_TYPE];
req.add(req.newFetchPersonRequest('OWNER', params), 'owner');
req.send(function(dataResponse) {
Assert.assertDataResponseHadError(dataResponse, result,
['owner'], null);
if (!dataResponse.hadError()) {
var actual = dataResponse.get('owner').getData().
getField(opensocial.Person.Field.BODY_TYPE);
var expected = context.getExpectedOwner()
[opensocial.Person.Field.BODY_TYPE];
Assert.assertSupportedObjectFields(result, actual, expected,
context.getData().bodyTypeFields,
opensocial.Environment.ObjectType.BODY_TYPE);
}
callback(result);
});
} else {
callback(result);
}
}
},
{ name: 'newFetchPersonRequest - OWNER (profile_details: schools)',
id: 'PPL106',
priority: Test.PRIORITY.P2,
description: 'Test if you can view SCHOOLS of OWNER profile',
run: function(context, callback, result) {
var req = opensocial.newDataRequest();
if (opensocial.getEnvironment().supportsField(
opensocial.Environment.ObjectType.PERSON,
opensocial.Person.Field.SCHOOLS)) {
var params = {};
params[opensocial.DataRequest.PeopleRequestFields.PROFILE_DETAILS] =
[opensocial.Person.Field.SCHOOLS];
req.add(req.newFetchPersonRequest('OWNER', params), 'owner');
req.send(function(dataResponse) {
Assert.assertDataResponseHadError(dataResponse, result,
['owner'], false);
if (!dataResponse.hadError()) {
var actual = dataResponse.get('owner').getData().
getField('schools');
var expected = context.getExpectedOwner()['schools'] ?
context.getExpectedOwner()['schools'] : {};
for (var i = 0; i < actual.length; i++) {
Assert.assertObjectEquals('schools', actual,
context.getData().organizationFields, expected[i], result);
}
}
callback(result);
});
} else {
callback(result);
}
}
},
{ name: 'newFetchPersonRequest - OWNER (profile_details: urls)',
id: 'PPL107',
priority: Test.PRIORITY.P2,
description: 'Test if you can view URLS of OWNER profile',
run: function(context, callback, result) {
var req = opensocial.newDataRequest();
if (opensocial.getEnvironment().supportsField(
opensocial.Environment.ObjectType.PERSON,
opensocial.Person.Field.URLS)) {
var params = {};
params[opensocial.DataRequest.PeopleRequestFields.PROFILE_DETAILS] =
[opensocial.Person.Field.URLS];
req.add(req.newFetchPersonRequest('OWNER', params), 'owner');
req.send(function(dataResponse) {
Assert.assertDataResponseHadError(dataResponse, result,
['owner'], false);
if (!dataResponse.hadError()) {
var actual = dataResponse.get('owner').getData().
getField(opensocial.Person.Field.URLS);
var expected = context.getExpectedOwner()
[opensocial.Person.Field.URLS] ?
context.getExpectedOwner()[opensocial.Person.Field.URLS]
: undefined;
if (actual && expected) {
Helper.addSubResult(result, 'urls.length', Assert.assertEquals,
actual.length, expected.length);
} else {
Helper.addUnverifiedResult(result, 'urls.length',
actual.length);
}
Assert.assertSupportedObjectFields(result, actual, expected,
context.getData().urlFields,
opensocial.Environment.ObjectType.URL);
}
callback(result);
});
} else {
callback(result);
}
}
},
{ name: 'newFetchPersonRequest - OWNER (profile_details: GENDER) test ENUM',
id: 'PPL108',
priority: Test.PRIORITY.P2,
description: 'Test if you can view GENDER information of OWNER profile',
run: function(context, callback, result) {
var req = opensocial.newDataRequest();
if (opensocial.getEnvironment().supportsField(
opensocial.Environment.ObjectType.PERSON,
opensocial.Person.Field.GENDER)) {
var params = {};
params[opensocial.DataRequest.PeopleRequestFields.PROFILE_DETAILS] =
[opensocial.Person.Field.GENDER];
req.add(req.newFetchPersonRequest('OWNER', params), 'owner');
req.send(function(dataResponse) {
Assert.assertDataResponseHadError(dataResponse, result,
['owner'], null);
if (!dataResponse.hadError()) {
var actual = dataResponse.get('owner').getData();
Helper.addSubResult(result, 'Gender is in the gender Enum',
Assert.assertDefined,
opensocial.Enum.Gender[
actual.getField(
opensocial.Person.Field.GENDER).getKey()],
'Gender Display Name Equals');
}
callback(result);
});
} else {
callback(result);
}
}
},
/***************************************
* 1.3 newFetchPersonRequest - OTHER IDS
***************************************/
{ name: 'newFetchPersonRequest - String ID',
id: 'PPL200',
priority: Test.PRIORITY.P0,
description: 'Test if you can view profile for given ID - numeric value',
run: function(context, callback, result) {
if (!context.isViewerWithoutApp()) {
var req = opensocial.newDataRequest();
var expected = context.getExpectedViewer();
var viewerId = context.isViewerWithoutApp() ?
context.getData().testUserData['id']
: context.getViewer().getId();
req.add(req.newFetchPersonRequest(viewerId), 'viewer');
req.send(function(dataResponse) {
Assert.assertDataResponseHadError(dataResponse, result,
['viewer'], null);
if (!dataResponse.hadError()) {
var actual = dataResponse.get('viewer').getData();
// attach individual verification items to the result object
Assert.assertObjectEquals('viewer', actual, null, expected, result);
Assert.assertPersonFields(result, actual, expected,
context.getData().basicPersonFields,
opensocial.getEnvironment().supportedFields
[opensocial.Environment.ObjectType.PERSON]);
}
callback(result);
});
} else {
Helper.addInfoSubResult(result, 'newFetchPersonRequest(\'id\')',
Assert.assertDefined, 'Won\'t work without user id');
callback(result);
}
}
},
/*********************************************
* 1.4 newFetchPersonRequest - Error Handling
*********************************************/
{ name: 'newFetchPersonRequest - Empty id. Error is expected.',
id: 'PPL300',
priority: Test.PRIORITY.P2,
description: 'Test if you get error while trying to fetch profile ' +
'without passing any parameter.',
run: function(context, callback, result) {
var req = opensocial.newDataRequest();
req.add(req.newFetchPersonRequest(), 'someone');
req.send(function(dataResponse) {
Assert.assertDataResponseHadError(dataResponse, result,
['someone'], true);
Assert.assertDataResponseItemHadError('someone',
dataResponse.get('someone'), result, true);
callback(result);
});
}
},
/*********************************************
* 1.5 newFetchPersonRequest - Misc
*********************************************/
// PPL400
/********************************************
* 2.1 newFetchPeopleRequest - viewer's friends
********************************************/
{ name: 'newFetchPeopleRequest - viewer\'s friends (default - no params) ',
id: 'PPL501',
priority: Test.PRIORITY.P0,
description: 'Test if you can retrieve viewer\'s friends information',
run: function(context, callback, result) {
var supportedPersonFields = opensocial.getEnvironment()
.supportedFields[opensocial.Environment.ObjectType.PERSON] || [];
var req = opensocial.newDataRequest();
req.add(req.newFetchPeopleRequest(opensocial.newIdSpec(
{userId : 'VIEWER', groupId : 'FRIENDS', networkDistance : 1})),
'viewerFriends');
// defaults to ALL, max is 20, details: id, name, isViewer, isOwner
// and basic fields
req.send(function(dataResponse) {
if (context.isViewerWithoutApp()) {
Assert.assertDataResponseHadError(dataResponse, result,
['viewerFriends'], true);
} else {
Assert.assertDataResponseHadError(dataResponse, result,
['viewerFriends'], null);
if (!dataResponse.hadError()) {
var actual = dataResponse.get('viewerFriends').getData()
.asArray();
var expectedViewer = context.getExpectedViewer();
// default to max=20, sortByTopFriends, filterAll
Assert.assertFriendProfileFields(result, actual, expectedViewer,
context.getData().basicPersonFields);
Helper.addSubResult(result, 'actual.length <= 20',
Assert.assertTrue, actual.length <= 20, true);
}
}
callback(result);
});
}
},
{ name: 'newFetchPeopleRequest - viewer friends (profile_details basic)',
id: 'PPL502',
priority: Test.PRIORITY.P0,
description: 'Test if you can retrieve viewer\'s friends basic profile ' +
'detail.',
run: function(context, callback, result) {
var req = opensocial.newDataRequest();
var params = {};
params[opensocial.DataRequest.PeopleRequestFields.PROFILE_DETAILS] =
context.getData().basicPersonFields;
req.add(req.newFetchPeopleRequest(opensocial.newIdSpec(
{userId : 'VIEWER', groupId : 'FRIENDS', networkDistance : 1}),
params), 'viewerFriends');
req.send(function(dataResponse) {
if (context.isViewerWithoutApp()) {
Assert.assertDataResponseHadError(dataResponse, result,
['viewerFriends'], true);
} else {
Assert.assertDataResponseHadError(dataResponse, result,
['viewerFriends'], null);
if (!dataResponse.hadError()) {
var actual = dataResponse.get('viewerFriends').getData()
.asArray();
var expectedFriends = context.getExpectedViewer() &&
context.getExpectedViewer()['__friends__'];
// Attach individual verification items to the result object.
Assert.assertFriendsEquals('viewerFriends', actual,
expectedFriends, context.getData().basicPersonFields,
null, result);
}
}
callback(result);
});
}
},
{ name: 'newFetchPeopleRequest - viewer\'s friends (all & default sort)' +
' ACL',
id: 'PPL503',
priority: Test.PRIORITY.P2,
description: 'Test if you can retrieve viewer\'s friends all details.',
run: function(context, callback, result) {
var req = opensocial.newDataRequest();
var params = {};
params[opensocial.DataRequest.PeopleRequestFields.PROFILE_DETAILS] =
context.getData().personFields;
req.add(req.newFetchPeopleRequest(opensocial.newIdSpec(
{userId : 'VIEWER', groupId : 'FRIENDS', networkDistance : 1}),
params), 'viewerFriends');
// defaults to ALL, max is 20, details: id, name, isViewer, isOwner
// and only accessible fields should be returned
req.send(function(dataResponse) {
if (context.isViewerWithoutApp()) {
Assert.assertDataResponseHadError(dataResponse, result,
['viewerFriends'], true);
} else {
Assert.assertDataResponseHadError(dataResponse, result,
['viewerFriends'], false);
if (!dataResponse.hadError()) {
var actual = dataResponse.get('viewerFriends').getData()
.asArray();
var expectedViewer = context.getExpectedViewer();
// can only access fields user is allowed to access
Assert.assertFriendProfileFields(result, actual, expectedViewer,
context.getData().basicPersonFields,
opensocial.getEnvironment().supportedFields
[opensocial.Environment.ObjectType.PERSON]);
// default to max=20, sortByTopFriends, filterAll
var expectedViewerCloned = Helper.cloneObject(expectedViewer);
var expectedFriends = expectedViewerCloned &&
expectedViewerCloned['__friends__'];
Helper.addSubResult(result, 'actual.length<=20',
Assert.assertTrue, actual.length <= 20, 'length<=20');
// verify the default sorting is TOP_FRIENDS
Assert.assertFriendsEquals('viewerFriends', actual,
expectedFriends, context.getData().basicPersonFields,
null, result);
}
}
callback(result);
});
}
},
{ name: 'newFetchPeopleRequest - viewer\'s friends (topFriends)',
id: 'PPL504',
priority: Test.PRIORITY.P0,
description: 'Test if you can retrieve viewer\'s top friends',
run: function(context, callback, result) {
var req = opensocial.newDataRequest();
var params = {};
params[opensocial.DataRequest.PeopleRequestFields.SORT_ORDER] =
opensocial.DataRequest.SortOrder.TOP_FRIENDS;
req.add(req.newFetchPeopleRequest(opensocial.newIdSpec(
{userId : 'VIEWER', groupId : 'FRIENDS', networkDistance : 1}),
params), 'viewerFriends');
req.send(function(dataResponse) {
if (context.isViewerWithoutApp()) {
Assert.assertDataResponseHadError(dataResponse, result,
['viewerFriends'], true);
} else {
Assert.assertDataResponseHadError(dataResponse, result,
['viewerFriends'], false);
if (!dataResponse.hadError()) {
var actual = dataResponse.get('viewerFriends').getData()
.asArray();
// Clone the expected VIEWER and sort their friends by name.
var expectedViewerCloned = Helper.cloneObject(
context.getExpectedViewer());
var expectedFriends = expectedViewerCloned &&
expectedViewerCloned['__friends__'];
// Attach individual verification items to the result object.
Assert.assertFriendsEquals('viewerFriends', actual,
expectedFriends, context.getData().basicPersonFields,
null, result);
}
}
callback(result);
});
}
},
{ name: 'newFetchPeopleRequest - viewer\'s friends (hasApp)',
id: 'PPL505',
priority: Test.PRIORITY.P0,
description: 'Test if you can retrieve viewer\'s friends who HAS_APPS',
run: function(context, callback, result) {
if (PeopleSuite0_8.filteringHasAppSupported()) {
var req = opensocial.newDataRequest();
var params = {};
params[opensocial.DataRequest.PeopleRequestFields.FILTER] =
opensocial.DataRequest.FilterType.HAS_APP;
req.add(req.newFetchPeopleRequest(opensocial.newIdSpec(
{userId : 'VIEWER', groupId : 'FRIENDS', networkDistance : 1}),
params), 'viewerFriends');
req.send(function(dataResponse) {
if (context.isViewerWithoutApp()) {
Assert.assertDataResponseHadError(dataResponse, result,
['viewerFriends'], true);
} else {
Assert.assertDataResponseHadError(dataResponse, result,
['viewerFriends'], false);
if (!dataResponse.hadError()) {
var actual = dataResponse.get('viewerFriends').getData()
.asArray();
var expectedViewer = context.getExpectedViewer();
Assert.assertHasAppFriendFields(result, actual, expectedViewer,
context.getData().basicPersonFields);
}
}
callback(result);
});
} else {
callback(result);
}
}
},
{ name: 'newFetchPeopleRequest - viewer\'s friends (paginated 1 per page)',
id: 'PPL506',
priority: Test.PRIORITY.P2,
description: 'Test if you can retrieve viewer\'s friends information ' +
'and access it as pages, 1 per page.',
run: function(context, callback, result) {
// restricting max to 20 just in case if someone has not implemented
// spec properly.
var params = {};
params[opensocial.DataRequest.PeopleRequestFields.MAX] = 20;
var req = opensocial.newDataRequest();
req.add(req.newFetchPeopleRequest(opensocial.newIdSpec(
{userId : 'VIEWER', groupId : 'FRIENDS', networkDistance : 1}),
params), 'viewerFriends');
req.send(function(dataResponse) {
if (context.isViewerWithoutApp()) {
Assert.assertDataResponseHadError(dataResponse, result,
['viewerFriends'], true);
callback(result);
} else {
Assert.assertDataResponseHadError(dataResponse, result,
['viewerFriends'], false);
if (!dataResponse.hadError()) {
var dataCollection = dataResponse.get('viewerFriends').getData();
Helper.addSubResult(result, 'viewerFriends.totalSize >= 0',
Assert.assertTrue, dataCollection.getTotalSize() >= 0,
'viewerFriends.totalSize >= 0');
PeopleSuite0_8.assertAndCheckPersonData(0, 1, 0,
dataCollection.getTotalSize(), context, null, result,
callback);
} else {
callback(result);
}
}
});
}
},
/*******************************************
* 2.2 newFetchPeopleRequest - owner's friends
*******************************************/
{ name: 'newFetchPeopleRequest - owner\'s friends',
id: 'PPL600',
priority: Test.PRIORITY.P0,
description: 'Test if you can retrieve OWNER\'s friends information',
run: function(context, callback, result) {
var supportedPersonFields = opensocial.getEnvironment()
.supportedFields[opensocial.Environment.ObjectType.PERSON] || [];
var req = opensocial.newDataRequest();
req.add(req.newFetchPeopleRequest(opensocial.newIdSpec(
{userId : 'OWNER', groupId : 'FRIENDS', networkDistance : 1})),
'ownerFriends');
// defaults to ALL, max is 20, details: id, name, isOwner, isOwner
// and basic fields
req.send(function(dataResponse) {
Assert.assertDataResponseHadError(dataResponse, result,
['ownerFriends'], false);
if (!dataResponse.hadError()) {
var actual = dataResponse.get('ownerFriends').getData().asArray();
var expectedOwner = context.getExpectedOwner();
// return basic fields by default
Assert.assertHasAppFriendFields(result, actual, expectedOwner,
context.getData().basicPersonFields);
Helper.addSubResult(result, 'actual.length<=20', Assert.assertTrue,
actual.length <= 20, 'length<=20');
}
callback(result);
});
}
},
{ name: 'newFetchPeopleRequest - owner\' friends (profileDetails all) ACL',
id: 'PPL601',
priority: Test.PRIORITY.P0,
description: 'Test if you can retrieve OWNER\'s friends\'' +
' profile details',
run: function(context, callback, result) {
var req = opensocial.newDataRequest();
var params = {};
params[opensocial.DataRequest.PeopleRequestFields.PROFILE_DETAILS] =
context.getData().supportedPersonFields;
req.add(req.newFetchPeopleRequest(opensocial.newIdSpec(
{userId : 'OWNER', groupId : 'FRIENDS', networkDistance : 1}),
params), 'ownerFriends');
// defaults to ALL, max is 20, details: id, name, isOwner, isOwner
// and only accessible fields should be returned
req.send(function(dataResponse) {
Assert.assertDataResponseHadError(dataResponse, result,
['ownerFriends'], false);
if (!dataResponse.hadError()) {
var actual = dataResponse.get('ownerFriends').getData().asArray();
var expectedOwner = context.getExpectedOwner();
// can only access fields user is allowed to access
Assert.assertFriendProfileFields(result, actual, expectedOwner,
context.getData().basicPersonFields,
opensocial.getEnvironment().supportedFields
[opensocial.Environment.ObjectType.PERSON]);
// default to max=20, sortByTopFriends, filterAll
Helper.addSubResult(result, 'actual.length<=20', Assert.assertTrue,
actual.length <= 20, 'length<=20');
var expectedOwnerCloned = Helper.cloneObject(expectedOwner);
var expectedFriends = expectedOwnerCloned &&
expectedOwnerCloned['__friends__'];
Assert.assertFriendsEquals('ownerFriends', actual,
expectedFriends, context.getData().basicPersonFields,
null, result);
}
callback(result);
});
}
},
{ name: 'newFetchPeopleRequest - owner\' friends (SortOrder TOP_FRIENDS)',
id: 'PPL602',
priority: Test.PRIORITY.P0,
description: 'Test if you can retrieve OWNER\'s top friends',
run: function(context, callback, result) {
var supportedPersonFields = opensocial.getEnvironment()
.supportedFields[opensocial.Environment.ObjectType.PERSON] || [];
var req = opensocial.newDataRequest();
var params = {};
params[opensocial.DataRequest.PeopleRequestFields.SORT_ORDER] =
opensocial.DataRequest.SortOrder.TOP_FRIENDS;
req.add(req.newFetchPeopleRequest(opensocial.newIdSpec(
{userId : 'OWNER', groupId : 'FRIENDS', networkDistance : 1}),
params), 'ownerFriends');
// default to returning only basic fields
req.send(function(dataResponse) {
Assert.assertDataResponseHadError(dataResponse, result,
['ownerFriends'], false);
if (!dataResponse.hadError()) {
var actual = dataResponse.get('ownerFriends').getData().asArray();
var expectedOwner = context.getExpectedOwner();
var expectedOwnerCloned = Helper.cloneObject(expectedOwner);
var expectedFriends = expectedOwnerCloned &&
expectedOwnerCloned['__friends__'];
Assert.assertFriendsEquals('ownerFriends', actual,
expectedFriends, context.getData().basicPersonFields,
null, result);
}
callback(result);
});
}
},
{ name: 'newFetchPeopleRequest - owner\' friends (first, max)',
id: 'PPL603',
priority: Test.PRIORITY.P0,
description: 'Test if you can retrieve subset of owner\'s friends i.e.' +
' friends from entry 3 to 5 from returned list',
run: function(context, callback, result) {
var req = opensocial.newDataRequest();
req.add(req.newFetchPeopleRequest(opensocial.newIdSpec(
{userId : 'OWNER', groupId : 'FRIENDS', networkDistance : 1})),
'ownerFriendsDefault');
// with Params
var params = {};
params[opensocial.DataRequest.PeopleRequestFields.FIRST] = 1;
params[opensocial.DataRequest.PeopleRequestFields.MAX] = 1;
params[opensocial.DataRequest.PeopleRequestFields.SORT_ORDER] =
opensocial.DataRequest.SortOrder.TOP_FRIENDS;
req.add(req.newFetchPeopleRequest(opensocial.newIdSpec(
{userId : 'OWNER', groupId : 'FRIENDS', networkDistance : 1}),
params), 'ownerFriends');
req.send(function(dataResponse) {
Assert.assertDataResponseHadError(dataResponse, result,
['ownerFriends'], false);
if (!dataResponse.hadError()) {
var actualDefaultCollection = dataResponse.get(
'ownerFriendsDefault').getData();
var actualCollection = dataResponse.get('ownerFriends').getData();
var actual = actualCollection.asArray();
Helper.logIntoResult(result, 'TotalSize'
, actualDefaultCollection.getTotalSize());
Helper.addSubResult(result,
'getTotalSize(withMaxFilter vs. withoutMaxFilter)',
Assert.assertTrue,
actualDefaultCollection.getTotalSize() ==
actualCollection.getTotalSize(), '');
if (actualDefaultCollection.getTotalSize() >= 2) {
Helper.addSubResult(result,
'actualCollection.size() != actualDefaultCollection.size()',
Assert.assertNotEquals, actualCollection.size(),
actualDefaultCollection.size());
}
// Clone and sort by default sorting order, used as expected value.
var expectedOwnerCloned =
Helper.cloneObject(context.getExpectedOwner());
if (expectedOwnerCloned['__friends__'] != undefined) {
Assert.assertObjectEquals('ownerFriends', actual[0], null,
expectedOwnerCloned['__friends__'][1], result);
Assert.assertObjectEquals('ownerFriends',
actual[0], context.getData().basicPersonFields,
expectedOwnerCloned['__friends__'][1], result);
}
}
callback(result);
});
}
},
{ name: 'newFetchPeopleRequest - owner\' friends (max = 21)',
id: 'PPL604',
priority: Test.PRIORITY.P0,
description: 'Test if you can retrieve more than 20 friends of OWNER',
run: function(context, callback, result) {
var req = opensocial.newDataRequest();
var params = {};
params[opensocial.DataRequest.PeopleRequestFields.MAX] = 21;
var ownerFriends = context.getExpectedOwner()['__friends__'];
req.add(req.newFetchPeopleRequest(opensocial.newIdSpec(
{userId : 'OWNER', groupId : 'FRIENDS', networkDistance : 1}),
params), 'friends');
req.send(function(dataResponse) {
Assert.assertDataResponseHadError(dataResponse, result,
['friends'], false);
if (!dataResponse.hadError() && ownerFriends != undefined) {
var actual = dataResponse.get('friends').getData().asArray();
if (ownerFriends.length > 21) {
Helper.addSubResult(result, 'friends.length',
Assert.assertEquals, actual.length, 21);
} else {
Helper.addSubResult(result, 'friends.length',
Assert.assertEquals, actual.length, ownerFriends.length);
}
}
callback(result);
});
}
},
{ name: 'newFetchPeopleRequest - owner\' friends (hasApp)',
id: 'PPL605',
priority: Test.PRIORITY.P0,
description: 'Test if you can retrieve friends of OWNER who HAS_APP',
run: function(context, callback, result) {
var req = opensocial.newDataRequest();
var params = {};
params[opensocial.DataRequest.PeopleRequestFields.FILTER] =
opensocial.DataRequest.FilterType.HAS_APP;
req.add(req.newFetchPeopleRequest(opensocial.newIdSpec(
{userId : 'OWNER', groupId : 'FRIENDS', networkDistance : 1}),
params), 'ownerFriends');
req.send(function(dataResponse) {
Assert.assertDataResponseHadError(dataResponse, result,
['ownerFriends'], false);
if (!dataResponse.hadError()) {
var actual = dataResponse.get('ownerFriends').getData().asArray();
var expectedOwner = context.getExpectedOwner();
Assert.assertHasAppFriendFields(result, actual, expectedOwner,
context.getData().basicPersonFields);
}
callback(result);
});
}
},
{ name: 'newFetchPeopleRequest - owner\'s friends (hasApp, Max=100)',
id: 'PPL606',
priority: Test.PRIORITY.P0,
description: 'Test if you can retrieve upto 100 friends of ' +
'OWNER who HAS_APP',
run: function(context, callback, result) {
var req = opensocial.newDataRequest();
var params = {};
params[opensocial.DataRequest.PeopleRequestFields.MAX] = 100;
params[opensocial.DataRequest.PeopleRequestFields.FILTER] =
opensocial.DataRequest.FilterType.HAS_APP;
req.add(req.newFetchPeopleRequest(opensocial.newIdSpec(
{userId : 'OWNER', groupId : 'FRIENDS', networkDistance : 1}),
params), 'ownerFriends');
req.send(function(dataResponse) {
Assert.assertDataResponseHadError(dataResponse, result,
['ownerFriends'], false);
if (!dataResponse.hadError()) {
var actual = dataResponse.get('ownerFriends').getData().asArray();
var expectedOwner = context.getExpectedOwner();
Assert.assertHasAppFriendFields(result, actual, expectedOwner,
context.getData().basicPersonFields);
}
callback(result);
});
}
},
/***************************************
* 2.3 newFetchPeopleRequest - Other IDS
***************************************/
{ name: 'newFetchPeopleRequest - String ID',
id: 'PPL700',
priority: Test.PRIORITY.P0,
description: 'Test if you can retrieve friends of profile with given id',
run: function(context, callback, result) {
if (context.isViewerWithoutApp()) {
var req = opensocial.newDataRequest();
var expected = context.getExpectedViewer();
var viewerId = context.isViewerWithoutApp() ?
context.getData().testUserData['id']
: context.getViewer().getId();
req.add(req.newFetchPeopleRequest(viewerId), 'viewer');
req.send(function(dataResponse) {
Assert.assertDataResponseHadError(dataResponse, result,
['viewer'], false);
if (!dataResponse.hadError()) {
var actual = dataResponse.get('viewer').getData().asArray();
// attach individual verification items to the result object
Assert.assertObjectEquals('viewer',
actual[0], null, expected, result);
Assert.assertPersonFields(result, actual[0], expected,
context.getData().basicPersonFields,
opensocial.getEnvironment().supportedFields
[opensocial.Environment.ObjectType.PERSON]);
}
callback(result);
});
} else {
Helper.addInfoSubResult(result, 'newFetchPersonRequest(\'id\')',
Assert.assertDefined, 'Won\'t work without user id');
callback(result);
}
}
},
{ name: 'newFetchPeopleRequest - Array IDs (all hasApp)',
id: 'PPL701',
priority: Test.PRIORITY.P2,
description: 'Test if you can retrieve friends profiles for list of ids' +
' with HAS_APP=true',
run: function(context, callback, result) {
var req = opensocial.newDataRequest();
var expected = context.getExpectedViewer();
var expectedFriends = expected && expected['__friends__'] ?
expected['__friends__'] : [];
var expectedFriendsWithApp = [];
var expectedFriendsWithAppIds = [];
for (var i = 0; i < expectedFriends.length; i++) {
if (expectedFriends[i]['hasPeopleApp']) {
expectedFriendsWithApp.push(expectedFriends[i]);
expectedFriendsWithAppIds.push(expectedFriends[i]['id']);
}
}
if (expectedFriendsWithApp.length > 0) {
var params = {};
params[opensocial.DataRequest.PeopleRequestFields.PROFILE_DETAILS] =
context.getData().personFields;
params[opensocial.DataRequest.PeopleRequestFields.FILTER] =
opensocial.DataRequest.FilterType.HAS_APP;
req.add(req.newFetchPeopleRequest(expectedFriendsWithAppIds, params),
'viewerFriendsWithApp');
req.send(function(dataResponse) {
Assert.assertDataResponseHadError(dataResponse, result,
['viewerFriendsWithApp'], false);
if (!dataResponse.hadError()) {
var responseItem = dataResponse.get('viewerFriendsWithApp');
Assert.assertDataResponseItemHadError('viewerFriendsWithApp',
responseItem, result, false);
var actual = responseItem.getData().asArray();
Assert.assertHasAppFriendFields(result, actual,
context.getExpectedViewer(),
context.getData().personFields);
for (var i = 0; i < context.getData().personFields.length; i++) {
var f = context.getData().personFields[i];
var subtest;
var fieldValue = actual[0].getField(f);
if (Helper.indexOf(context.getData().supportedPersonFields,
f) < 0) {
if (!Assert.assertNull(fieldValue)) {
Helper.addSubResult(result,
'non-container-supported field - ' + f,
Assert.assertNull, fieldValue,
'non-supported field should be NULL');
}
}
}
}
callback(result);
});
} else {
callback(result);
}
}
},
{ name: 'newFetchPeopleRequest - Array IDs (hasApp false)',
id: 'PPL702',
priority: Test.PRIORITY.P2,
description: 'Test if you can retrieve friends profiles for list of ids' +
' with HAS_APP=false',
run: function(context, callback, result) {
var req = opensocial.newDataRequest();
var expected = context.getExpectedViewer();
var expectedFriends = expected && expected['__friends__'] ?
expected['__friends__'] : [];
var expectedFriendsWithoutApp = [];
var expectedFriendsWithoutAppIds = [];
for (var i = 0; i < expectedFriends.length; i++) {
if (!expectedFriends[i]['hasPeopleApp']) {
expectedFriendsWithoutApp.push(expectedFriends[i]);
expectedFriendsWithoutAppIds.push(expectedFriends[i]['id']);
}
}
if (expectedFriendsWithoutApp.length > 0) {
req.add(req.newFetchPeopleRequest(expectedFriendsWithoutAppIds),
'viewerFriendsWithoutApp');
req.send(function(dataResponse) {
Assert.assertDataResponseHadError(dataResponse, result, null, true);
callback(result);
});
} else {
callback(result);
}
}
},
{ name: 'newFetchPeopleRequest - Array IDs',
id: 'PPL703',
priority: Test.PRIORITY.P0,
description: 'Test if you can retrieve friends profiles for list of ids',
run: function(context, callback, result) {
var req = opensocial.newDataRequest();
var expectedViewer = context.getExpectedViewer();
if (expectedViewer && expectedViewer['__friends__'] &&
expectedViewer['__friends__'][0] &&
expectedViewer['__friends__'][1]) {
req.add(req.newFetchPeopleRequest(
[expectedViewer['__friends__'][0]['getId'],
expectedViewer['__friends__'][1]['getId']]), 'viewerFriend');
req.send(function(dataResponse) {
if (context.isViewerWithoutApp()) {
Assert.assertDataResponseHadError(dataResponse, result,
['viewerFriend'], true);
} else {
if (expectedViewer['__friends__'][0]['hasPeopleApp'] &&
expectedViewer['__friends__'][1]['hasPeopleApp']) {
Assert.assertDataResponseHadError(dataResponse, result,
['viewerFriend'], false);
}
if (!dataResponse.hadError()) {
var actual = dataResponse.get('viewerFriend').getData()
.asArray();
// Check both length.
Helper.addSubResult(result, 'people.length', Assert.assertTrue,
actual.length == 2, 2);
}
}
callback(result);
});
} else {
callback(result);
}
}
},
{ name: 'newFetchPeopleRequest - VIEWER',
id: 'PPL704',
priority: Test.PRIORITY.P0,
description: 'Test if you can retrieve VIEWER information using ' +
'newFetchPeopleRequest()',
run: function(context, callback, result) {
var req = opensocial.newDataRequest();
var expectedViewer = context.getExpectedViewer();
req.add(req.newFetchPeopleRequest(Config.VIEWER), 'viewer');
req.send(function(dataResponse) {
if (context.isViewerWithoutApp()) {
Assert.assertDataResponseHadError(dataResponse, result,
['viewer'], true);
} else {
Assert.assertDataResponseHadError(dataResponse, result,
['viewer'], false);
if (!dataResponse.hadError()) {
var actual = dataResponse.get('viewer').getData().asArray();
// Attach individual verification items to the result object.
Assert.assertObjectEquals('viewer', actual[0], null,
expectedViewer, result);
Assert.assertObjectEquals('viewer', actual[0],
context.getData().basicPersonFields, expectedViewer, result);
}
}
callback(result);
});
}
},
{ name: 'newFetchPeopleRequest - OWNER',
id: 'PPL705',
priority: Test.PRIORITY.P0,
description: 'Test if you can retrieve OWNER information using ' +
'newFetchPeopleRequest()',
run: function(context, callback, result) {
var req = opensocial.newDataRequest();
var expectedOwner = context.getExpectedOwner();
req.add(req.newFetchPeopleRequest(Config.OWNER), 'owner');
req.send(function(dataResponse) {
Assert.assertDataResponseHadError(dataResponse, result,
['owner'], false);
if (!dataResponse.hadError()) {
var actual = dataResponse.get('owner').getData().asArray();
// Attach individual verification items to the result object.
Assert.assertObjectEquals('owner', actual[0], null,
expectedOwner, result);
Assert.assertObjectEquals('owner', actual[0],
context.getData().basicPersonFields, expectedOwner, result);
}
callback(result);
});
}
},
/********************************************
* 2.4 newFetchPeopleRequest - Error Handling
********************************************/
{ name: 'newFetchPeopleRequest - with invalid opt_params',
id: 'PPL801',
bugs: ['1047119'],
priority: Test.PRIORITY.P2,
description: 'Test if you get error for passing wrong params to ' +
'newFetchPeopleRequest()',
run: function(context, callback, result) {
var req = opensocial.newDataRequest();
// Wrong kind of parameter. Must generate an error BAD_REQUEST
var params = { 'AA' : 'AA', 'max' : 'a' , 'first' : 'b'};
req.add(req.newFetchPeopleRequest(opensocial.newIdSpec(
{userId : 'OWNER', groupId : 'FRIENDS', networkDistance : 1}),
params), 'friends');
req.send(function(dataResponse) {
Assert.assertDataResponseHadError(dataResponse, result,
['friends'], true);
Assert.assertDataResponseItemHadError('friends',
dataResponse.get('friends'),
result, true, opensocial.ResponseItem.Error.BAD_REQUEST);
callback(result);
});
}
},
{ name: 'newFetchPeopleRequest - viewer\'s friends (paging trying record' +
' out of bounds)',
id: 'PPL802',
priority: Test.PRIORITY.P2,
description: 'Test if you get error for trying to fetch VIEWER\'s ' +
'friends page that\'s out of bounds. i.e. accessing 1000th' +
' page where only 10 pages exists',
run: function(context, callback, result) {
var req = opensocial.newDataRequest();
var params = {};
params[opensocial.DataRequest.PeopleRequestFields.FIRST] = 99999;
req.add(req.newFetchPeopleRequest(opensocial.newIdSpec(
{userId : 'VIEWER', groupId : 'FRIENDS', networkDistance : 1}),
params), 'viewerFriends');
req.send(function(dataResponse) {
if (context.isViewerWithoutApp()) {
Assert.assertDataResponseHadError(dataResponse, result,
['viewerFriends'], true);
} else {
Assert.assertDataResponseHadError(dataResponse, result,
['viewerFriends'], false);
if (!dataResponse.hadError()) {
var dataCollection = dataResponse.get('viewerFriends').getData();
Helper.addSubResult(result, 'viewerFriends.totalSize >= 0',
Assert.assertTrue, dataCollection.getTotalSize() >= 0,
'viewerFriends.totalSize >= 0');
Helper.addSubResult(result, 'viewerFriends.size == 0',
Assert.assertTrue, dataCollection.size() == 0,
'viewerFriends.size == 0');
}
}
callback(result);
});
}
},
{ name: 'newFetchPeopleRequest - owner\'s friends (paging trying record out '
+ 'of bounds)',
id: 'PPL803',
priority: Test.PRIORITY.P2,
description: 'Test if you get error for trying to fetch OWNER\'s ' +
'friends page that\'s out of bounds. i.e. accessing 1000th' +
' page where only 10 pages exists',
run: function(context, callback, result) {
var req = opensocial.newDataRequest();
var params = {};
params[opensocial.DataRequest.PeopleRequestFields.FIRST] = 99999;
req.add(req.newFetchPeopleRequest(opensocial.newIdSpec(
{userId : 'OWNER', groupId : 'FRIENDS', networkDistance : 1}),
params), 'ownerFriends');
req.send(function(dataResponse) {
Assert.assertDataResponseHadError(dataResponse, result,
['ownerFriends'], false);
if (!dataResponse.hadError()) {
var dataCollection = dataResponse.get('ownerFriends').getData();
Helper.addSubResult(result, 'ownerFriends.totalSize >= 0',
Assert.assertTrue, dataCollection.getTotalSize() >= 0,
'ownerFriends.totalSize >= 0');
Helper.addSubResult(result, 'ownerFriends.size == 0',
Assert.assertTrue, dataCollection.size() == 0,
'ownerFriends.size == 0');
}
callback(result);
});
}
},
/********************************************
* 2.5 newFetchPeopleRequest - Misc
********************************************/
{ name: 'Collection - Collection.each(Person)',
id: 'PPL900',
priority: Test.PRIORITY.P2,
description: 'Test if fetching owner\'s friends gives collection object ' +
' and collection has no empty record',
run: function(context, callback, result) {
var req = opensocial.newDataRequest();
req.add(req.newFetchPeopleRequest(opensocial.newIdSpec(
{userId : 'OWNER', groupId : 'FRIENDS', networkDistance : 1})),
'ownerFriends');
req.send(function(dataResponse) {
Assert.assertDataResponseHadError(dataResponse, result,
['ownerFriends'], false);
if (!dataResponse.hadError()) {
var perCollection = dataResponse.get('ownerFriends').getData();
var atLeastOneDoesntExist = false;
perCollection.each(function(person) {
if (perCollection.getById(person.getId()) == null) {
atLeastOneDoesntExist = true;
}
});
Helper.addSubResult(result, 'Collection.each()',
Assert.assertFalse, atLeastOneDoesntExist,
'False. All persons must exist')
}
callback(result);
});
}
},
{ name: 'Collection - size() and totalSize()',
id: 'PPL901',
priority: Test.PRIORITY.P2,
description: 'Test if fetching owner\'s friends gives collection ' +
'object and collection size is right',
run: function(context, callback, result) {
var req = opensocial.newDataRequest();
req.add(req.newFetchPeopleRequest(opensocial.newIdSpec(
{userId : 'OWNER', groupId : 'FRIENDS', networkDistance : 1})),
'ownerFriends');
req.send(function(dataResponse) {
Assert.assertDataResponseHadError(dataResponse, result,
['ownerFriends'], false);
if (!dataResponse.hadError()) {
var actual = dataResponse.get('ownerFriends').getData();
var friends = context.getExpectedViewer()['__friends__'];
var smallLength = friends ? (friends.length <= 20) : undefined;
var largeLength = friends ? (friends.length > 20) : undefined;
if (smallLength || largeLength) {
if (smallLength) {
Helper.addSubResult(result, 'size() & totalSize()',
Assert.assertEquals, actual.getTotalSize(), actual.size());
} else {
Helper.addSubResult(result, 'size() & totalSize()',
Assert.assertNotEquals, actual.getTotalSize(),
actual.size());
}
} else {
Helper.addUnverifiedResult(result, 'size() & totalSize()',
'Total:' + actual.getTotalSize() + ' & ' + 'Size:' +
actual.size());
}
if (friends) {
Helper.addSubResult(result, 'Collection.size()',
Assert.assertEquals, actual.size(), friends.length);
} else {
Helper.addSubResult(result, 'Collection.size()',
Assert.assertTrue, actual.size() >= 0, actual.size());
}
}
callback(result);
});
}
},
{ name: 'Collection - getOffset()',
id: 'PPL902',
priority: Test.PRIORITY.P2,
description: 'Test if fetching owner\'s friends gives collection' +
' object getOffset gives the offset we assigned.',
run: function(context, callback, result) {
var req = opensocial.newDataRequest();
var params = {};
params[opensocial.DataRequest.PeopleRequestFields.FIRST] = 1;
req.add(req.newFetchPeopleRequest(opensocial.newIdSpec(
{userId : 'OWNER', groupId : 'FRIENDS', networkDistance : 1}),
params), 'ownerFriends');
req.send(function(dataResponse) {
Assert.assertDataResponseHadError(dataResponse, result,
['ownerFriends'], false);
if (!dataResponse.hadError()) {
var dataCollection = dataResponse.get('ownerFriends').getData();
Helper.addSubResult(result, 'Collection - getOffset>0',
Assert.assertTrue, dataCollection.getOffset() > 0,
'getOffset > 0');
}
callback(result);
});
}
},
{ name: 'Collection - getOffset() huge offset',
id: 'PPL903',
priority: Test.PRIORITY.P2,
description: 'Test if fetching owner\'s friends gives collection ' +
'object and preserves huge offset we have set.',
run: function(context, callback, result) {
var req = opensocial.newDataRequest();
var params = {};
params[opensocial.DataRequest.PeopleRequestFields.FIRST] = 9999;
req.add(req.newFetchPeopleRequest(opensocial.newIdSpec(
{userId : 'OWNER', groupId : 'FRIENDS', networkDistance : 1}),
params), 'ownerFriends');
req.send(function(dataResponse) {
Assert.assertDataResponseHadError(dataResponse, result,
['ownerFriends'], false);
if (!dataResponse.hadError()) {
var dataCollection = dataResponse.get('ownerFriends').getData();
Helper.addSubResult(result, 'Collection - getOffset > 0',
Assert.assertTrue, dataCollection.getOffset() > 0,
'getOffset > 0');
}
callback(result);
});
}
}
]
};
/**
* Utility method for test case: PPL506
* recursively fetch all opensocial.newIdSpec(
* {userId : 'VIEWER', groupId : 'FRIENDS', networkDistance : 1})
* simulating paging over the friend collection and checking for every entry
* the data returned.
* @param {number} current Currently fetched record.
* @param {number} pageSize the page size, or the maximum size of the collection
* @param {number} pageNumber the current page number
* @param {Context} context The opensocial testing context
* @param {opensocial.Collection} dataCollection The data collection of
* opensocial.newIdSpec(
* {userId : 'VIEWER', groupId : 'FRIENDS', networkDistance : 1})
* that contain the people data
* @param {ResultGroup} the result from the test
* @param {Function} callback the function that is invoked after the test has
* been completed
*/
PeopleSuite0_8.assertAndCheckPersonData = function(current, pageSize, pageNumber,
totalRecords, context, dataCollection, result, callback) {
var total = totalRecords;
if (dataCollection) {
Helper.addSubResult(result, 'Last getTotalSize == getTotalSize',
Assert.assertEquals, dataCollection.getTotalSize(), totalRecords);
Helper.addSubResult(result, 'page[' + pageNumber + '] '
+ 'viewerFriends.size <= ' + pageSize,
Assert.assertTrue, dataCollection.size() <= pageSize,
'dataCollection.size() <= pageSize');
dataCollection.each(function(person) {
var expectedViewer = context.getExpectedViewer();
Assert.assertFriendProfileFields(result, dataCollection.asArray(),
expectedViewer, context.getData().basicPersonFields);
Helper.addSubResult(result, 'person[' + current + '].name',
Assert.assertDefined, person.getDisplayName(), 'some value');
current++;
});
pageNumber++;
total = dataCollection.getTotalSize();
}
if (current < total) {
var req = opensocial.newDataRequest();
var params = {};
params[opensocial.DataRequest.PeopleRequestFields.MAX] = pageSize;
params[opensocial.DataRequest.PeopleRequestFields.FIRST] = current;
req.add(req.newFetchPeopleRequest(opensocial.newIdSpec(
{userId : 'VIEWER', groupId : 'FRIENDS', networkDistance : 1}), params),
'viewerFriends');
req.send(function(dataResponse) {
Assert.assertDataResponseHadError(dataResponse, result,
['viewerFriends'], false);
if (!dataResponse.hadError() && dataResponse.get('viewerFriends')) {
PeopleSuite0_8.assertAndCheckPersonData(current, pageSize, pageNumber,
totalRecords, context, dataResponse.get('viewerFriends').getData(),
result, callback);
} else {
Assert.assertDataResponseHadError(dataResponse, result,
['viewerFriends'], false);
callback(result);
}
});
} else {
Helper.addSubResult(result, 'Total Pages:', Assert.assertEquals, pageNumber,
totalRecords / pageSize);
callback(result);
}
};
PeopleSuite0_8.filteringHasAppSupported = function() {
return opensocial.getEnvironment().supportsField(
opensocial.Environment.ObjectType.FILTER_TYPE,
opensocial.DataRequest.FilterType.HAS_APP);
}
PeopleSuite0_8.counter = {};