~launchpad-pqm/launchpad/devel

« back to all changes in this revision

Viewing changes to lib/lp/bugs/javascript/tests/test_subscription.js

  • Committer: j.c.sackett
  • Date: 2011-04-20 14:22:51 UTC
  • mfrom: (12884 devel)
  • mto: This revision was merged to the branch mainline in revision 12888.
  • Revision ID: jonathan.sackett@canonical.com-20110420142251-gzcq87wlxzqse4r1
MergedĀ inĀ devel.

Show diffs side-by-side

added added

removed removed

Lines of Context:
259
259
            personal: [],
260
260
            as_team_member: [],
261
261
            as_team_admin: [{ principal: 'team1'},
262
 
                             { principal: 'team2'}]
 
262
                            { principal: 'team2'}]
263
263
        };
264
264
        var subs = module._gather_subscriptions_as_assignee(mock_category);
265
265
        Y.Assert.areEqual(1, subs.length);
947
947
 * Tests for method get_direct_subscription_information().
948
948
 */
949
949
suite.add(new Y.Test.Case({
950
 
    name: 'Get reason for a direct subscription',
 
950
    name: 'Get reason and actions for a direct subscription',
951
951
 
952
952
    _should: {
953
953
        error: {
954
954
            test_multiple_direct_subscriptions:
955
 
            new Error('A person should not have more than ' +
956
 
                      'one direct personal subscription.')
 
955
            new Error('Programmer error: a person should not have more than '+
 
956
                      'one direct personal subscription.'),
 
957
            test_direct_subscription_at_unknown_level:
 
958
            new Error('Programmer error: unknown bug notification level: '+
 
959
                      'The Larch')
957
960
        }
958
961
    },
959
962
 
968
971
        module._get_direct_subscription_information(info);
969
972
    },
970
973
 
971
 
    test_no_subscriptions: function() {
 
974
    test_no_subscriptions_at_all: function() {
972
975
        // There are no subscriptions at all.
973
976
        var info = {
974
977
            direct: _constructCategory(),
976
979
        };
977
980
        info.count = info.direct.count + info.from_duplicates.count;
978
981
 
 
982
        direct_info = module._get_direct_subscription_information(info);
979
983
        Y.Assert.areEqual(
980
984
            module._reasons.NOT_SUBSCRIBED,
981
 
            module._get_direct_subscription_information(info));
 
985
            direct_info.reason);
 
986
        Y.ArrayAssert.itemsAreEqual(
 
987
            [],
 
988
            direct_info.reductions);
 
989
        Y.ArrayAssert.itemsAreEqual(
 
990
            ['select-direct-subscription-discussion',
 
991
             'select-direct-subscription-metadata',
 
992
             'select-direct-subscription-lifecycle'],
 
993
            direct_info.increases);
982
994
    },
983
995
 
984
996
    test_no_direct_subscriptions: function() {
989
1001
            from_duplicates: _constructCategory(['dupe'])
990
1002
        };
991
1003
        info.count = info.direct.count + info.from_duplicates.count;
 
1004
        direct_info = module._get_direct_subscription_information(info);
992
1005
        Y.Assert.areSame(
993
1006
            module._reasons.NOT_PERSONALLY_SUBSCRIBED,
994
 
            module._get_direct_subscription_information(info));
 
1007
            direct_info.reason);
 
1008
        Y.ArrayAssert.itemsAreEqual(
 
1009
            ['mute-direct-subscription',
 
1010
             'select-only-direct-subscription-metadata',
 
1011
             'select-only-direct-subscription-lifecycle'],
 
1012
            direct_info.reductions);
 
1013
        Y.ArrayAssert.itemsAreEqual(
 
1014
            [],
 
1015
            direct_info.increases);
995
1016
    },
996
1017
 
997
1018
    test_muted_subscription: function() {
1001
1022
            muted: true
1002
1023
        };
1003
1024
        info.count = info.direct.count;
 
1025
        direct_info = module._get_direct_subscription_information(info);
1004
1026
        Y.Assert.areSame(
1005
1027
            module._reasons.MUTED_SUBSCRIPTION,
1006
 
            module._get_direct_subscription_information(info));
1007
 
    },
1008
 
 
1009
 
    test_direct_subscription: function() {
1010
 
        // The simple direct subscription.
1011
 
        var sub = {
1012
 
            bug: {
1013
 
                //private: false, // JSLint complains
1014
 
                security_related: false
1015
 
            },
1016
 
            principal_is_reporter: false
1017
 
        };
1018
 
        sub.bug['private'] = false;
1019
 
        var info = {
1020
 
            direct: _constructCategory([sub]),
1021
 
            count: 1
1022
 
        };
1023
 
 
1024
 
        Y.Assert.areSame(
1025
 
            module._reasons.YOU_SUBSCRIBED,
1026
 
            module._get_direct_subscription_information(info));
 
1028
            direct_info.reason);
 
1029
        Y.ArrayAssert.itemsAreEqual(
 
1030
            [],
 
1031
            direct_info.reductions);
 
1032
        Y.ArrayAssert.itemsAreEqual(
 
1033
            ['unmute-direct-subscription',
 
1034
             'select-direct-subscription-discussion',
 
1035
             'select-direct-subscription-metadata',
 
1036
             'select-direct-subscription-lifecycle'],
 
1037
            direct_info.increases);
 
1038
    },
 
1039
 
 
1040
    test_direct_subscription_at_discussion_level: function() {
 
1041
        // The larch^D^D^D^D^D^D simple direct subscription.
 
1042
        var sub = {
 
1043
            bug: {
 
1044
                'private': false,
 
1045
                security_related: false
 
1046
            },
 
1047
            principal_is_reporter: false,
 
1048
            subscription: {bug_notification_level: 'Discussion'}
 
1049
        };
 
1050
        var info = {
 
1051
            direct: _constructCategory([sub]),
 
1052
            count: 1
 
1053
        };
 
1054
 
 
1055
        var direct_info = module._get_direct_subscription_information(info);
 
1056
        Y.Assert.areSame(
 
1057
            module._reasons.YOU_SUBSCRIBED,
 
1058
            direct_info.reason);
 
1059
        Y.ArrayAssert.itemsAreEqual(
 
1060
            ['mute-direct-subscription',
 
1061
             'select-only-direct-subscription-metadata',
 
1062
             'select-only-direct-subscription-lifecycle',
 
1063
             'remove-direct-subscription'],
 
1064
            direct_info.reductions);
 
1065
        Y.ArrayAssert.itemsAreEqual(
 
1066
            [],
 
1067
            direct_info.increases);
 
1068
    },
 
1069
 
 
1070
    test_direct_subscription_at_metadata_level: function() {
 
1071
        // The simple direct subscription at metadata level.
 
1072
        var sub = {
 
1073
            bug: {
 
1074
                'private': false,
 
1075
                security_related: false
 
1076
            },
 
1077
            principal_is_reporter: false,
 
1078
            subscription: {bug_notification_level: 'Details'}
 
1079
        };
 
1080
        var info = {
 
1081
            direct: _constructCategory([sub]),
 
1082
            count: 1
 
1083
        };
 
1084
 
 
1085
        var direct_info = module._get_direct_subscription_information(info);
 
1086
        Y.Assert.areSame(
 
1087
            module._reasons.YOU_SUBSCRIBED,
 
1088
            direct_info.reason);
 
1089
        Y.ArrayAssert.itemsAreEqual(
 
1090
            ['mute-direct-subscription',
 
1091
             'select-only-direct-subscription-lifecycle',
 
1092
             'remove-direct-subscription'],
 
1093
            direct_info.reductions);
 
1094
        Y.ArrayAssert.itemsAreEqual(
 
1095
            ['select-direct-subscription-discussion'],
 
1096
            direct_info.increases);
 
1097
    },
 
1098
 
 
1099
    test_direct_subscription_at_lifecycle_level: function() {
 
1100
        // The simple direct subscription at lifecycle level.
 
1101
        var sub = {
 
1102
            bug: {
 
1103
                'private': false,
 
1104
                security_related: false
 
1105
            },
 
1106
            principal_is_reporter: false,
 
1107
            subscription: {bug_notification_level: 'Lifecycle'}
 
1108
        };
 
1109
        var info = {
 
1110
            direct: _constructCategory([sub]),
 
1111
            count: 1
 
1112
        };
 
1113
 
 
1114
        var direct_info = module._get_direct_subscription_information(info);
 
1115
        Y.Assert.areSame(
 
1116
            module._reasons.YOU_SUBSCRIBED,
 
1117
            direct_info.reason);
 
1118
        Y.ArrayAssert.itemsAreEqual(
 
1119
            ['mute-direct-subscription',
 
1120
             'remove-direct-subscription'],
 
1121
            direct_info.reductions);
 
1122
        Y.ArrayAssert.itemsAreEqual(
 
1123
            ['select-direct-subscription-discussion',
 
1124
             'select-direct-subscription-metadata'],
 
1125
            direct_info.increases);
 
1126
    },
 
1127
 
 
1128
    test_direct_subscription_at_unknown_level: function() {
 
1129
        // The simple direct subscription at unknown level.
 
1130
        var sub = {
 
1131
            bug: {
 
1132
                'private': false,
 
1133
                security_related: false
 
1134
            },
 
1135
            principal_is_reporter: false,
 
1136
            subscription: {bug_notification_level: 'The Larch'}
 
1137
        };
 
1138
        var info = {
 
1139
            direct: _constructCategory([sub]),
 
1140
            count: 1
 
1141
        };
 
1142
        // This should raise an error.
 
1143
        module._get_direct_subscription_information(info);
1027
1144
    },
1028
1145
 
1029
1146
    test_direct_subscription_as_reporter: function() {
1030
1147
        // The direct subscription created for bug reporter.
1031
1148
        var sub = {
1032
1149
            bug: {},
1033
 
            principal_is_reporter: true
 
1150
            principal_is_reporter: true,
 
1151
            subscription: {bug_notification_level: 'Discussion'}
1034
1152
        };
1035
1153
        var info = {
1036
1154
            direct: _constructCategory([sub]),
1037
1155
            count: 1
1038
1156
        };
 
1157
 
 
1158
        var direct_info = module._get_direct_subscription_information(info);
1039
1159
        Y.Assert.areSame(
1040
1160
            module._reasons.YOU_REPORTED,
1041
 
            module._get_direct_subscription_information(info));
 
1161
            direct_info.reason);
 
1162
        Y.ArrayAssert.itemsAreEqual(
 
1163
            ['mute-direct-subscription',
 
1164
             'select-only-direct-subscription-metadata',
 
1165
             'select-only-direct-subscription-lifecycle',
 
1166
             'remove-direct-subscription'],
 
1167
            direct_info.reductions);
 
1168
        Y.ArrayAssert.itemsAreEqual(
 
1169
            [],
 
1170
            direct_info.increases);
1042
1171
    },
1043
1172
 
1044
1173
    test_direct_subscription_for_supervisor: function() {
1046
1175
        // the bug supervisor.
1047
1176
        var sub = {
1048
1177
            bug: {
1049
 
                //private: true //JSLint complains
1050
 
            }
 
1178
                'private': true
 
1179
            },
 
1180
            subscription: {bug_notification_level: 'Discussion'}
1051
1181
        };
1052
 
        sub.bug['private'] = true;
1053
1182
        var info = {
1054
1183
            direct: _constructCategory([sub]),
1055
1184
            count: 1
1056
1185
        };
 
1186
        var direct_info = module._get_direct_subscription_information(info);
1057
1187
        Y.Assert.areSame(
1058
1188
            module._reasons.YOU_SUBSCRIBED_BUG_SUPERVISOR,
1059
 
            module._get_direct_subscription_information(info));
 
1189
            direct_info.reason);
 
1190
        Y.ArrayAssert.itemsAreEqual(
 
1191
            ['mute-direct-subscription',
 
1192
             'select-only-direct-subscription-metadata',
 
1193
             'select-only-direct-subscription-lifecycle',
 
1194
             'remove-direct-subscription'],
 
1195
            direct_info.reductions);
 
1196
        Y.ArrayAssert.itemsAreEqual(
 
1197
            [],
 
1198
            direct_info.increases);
1060
1199
    },
1061
1200
 
1062
1201
    test_direct_subscription_for_security_contact: function() {
1064
1203
        var sub = {
1065
1204
            bug: {
1066
1205
                security_related: true
1067
 
            }
 
1206
            },
 
1207
            subscription: {bug_notification_level: 'Discussion'}
1068
1208
        };
1069
1209
        var info = {
1070
1210
            direct: _constructCategory([sub]),
1071
1211
            count: 1
1072
1212
        };
 
1213
        var direct_info = module._get_direct_subscription_information(info);
1073
1214
        Y.Assert.areSame(
1074
1215
            module._reasons.YOU_SUBSCRIBED_SECURITY_CONTACT,
1075
 
            module._get_direct_subscription_information(info));
1076
 
    }
 
1216
            direct_info.reason);
 
1217
        Y.ArrayAssert.itemsAreEqual(
 
1218
            ['mute-direct-subscription',
 
1219
             'select-only-direct-subscription-metadata',
 
1220
             'select-only-direct-subscription-lifecycle',
 
1221
             'remove-direct-subscription'],
 
1222
            direct_info.reductions);
 
1223
        Y.ArrayAssert.itemsAreEqual(
 
1224
            [],
 
1225
            direct_info.increases);
 
1226
    },
 
1227
 
 
1228
    test_direct_subscription_and_other_subscriptions: function() {
 
1229
        // Other subscriptions are present along with the simple direct
 
1230
        // subscription.
 
1231
        var sub = {
 
1232
            bug: {
 
1233
                'private': false,
 
1234
                security_related: false
 
1235
            },
 
1236
            principal_is_reporter: false,
 
1237
            subscription: {bug_notification_level: 'Discussion'}
 
1238
        };
 
1239
        var info = {
 
1240
            direct: _constructCategory([sub]),
 
1241
            from_duplicates: _constructCategory(['dupe']),
 
1242
            count: 2
 
1243
        };
 
1244
 
 
1245
        var direct_info = module._get_direct_subscription_information(info);
 
1246
        Y.Assert.areSame(
 
1247
            module._reasons.YOU_SUBSCRIBED,
 
1248
            direct_info.reason);
 
1249
        Y.ArrayAssert.itemsAreEqual(
 
1250
            ['mute-direct-subscription',
 
1251
             'select-only-direct-subscription-metadata',
 
1252
             'select-only-direct-subscription-lifecycle',
 
1253
             'remove-direct-subscription-with-warning'],
 
1254
            direct_info.reductions);
 
1255
        Y.ArrayAssert.itemsAreEqual(
 
1256
            [],
 
1257
            direct_info.increases);
 
1258
    },
 
1259
 
1077
1260
 
1078
1261
}));
1079
1262
 
1272
1455
            direct: _constructCategory(),
1273
1456
            count: 0
1274
1457
        };
1275
 
        var expected_text = module._get_direct_subscription_information(info);
 
1458
        var expected_text = module._get_direct_subscription_information(
 
1459
            info).reason;
1276
1460
        var node = module._get_direct_description_node(info);
1277
 
        Y.Assert.areEqual(
1278
 
            'direct-subscription', node.get('id'));
1279
 
        Y.Assert.areEqual(
1280
 
            expected_text, node.get('text'));
 
1461
        Y.Assert.areEqual('direct-subscription', node.get('id'));
 
1462
        Y.Assert.isTrue(node.get('text').indexOf(expected_text) !== -1);
1281
1463
    },
1282
1464
 
1283
1465
    test_direct_subscription: function() {
1284
1466
        // One personal, direct subscription exists.
1285
1467
        var info = {
1286
 
            direct: _constructCategory([{ bug: {} }]),
 
1468
            direct: _constructCategory([{
 
1469
                bug: {},
 
1470
                subscription: {bug_notification_level: 'Discussion'} }]),
1287
1471
            count: 1
1288
1472
        };
1289
 
        var expected_text = module._get_direct_subscription_information(info);
 
1473
        var expected_text = module._get_direct_subscription_information(
 
1474
            info).reason;
1290
1475
        var node = module._get_direct_description_node(info);
1291
1476
        Y.Assert.areEqual(
1292
1477
            'direct-subscription', node.get('id'));
1293
 
        Y.Assert.areEqual(
1294
 
            expected_text, node.get('text'));
1295
 
    }
 
1478
        Y.Assert.isTrue(node.get('text').indexOf(expected_text) !== -1);
 
1479
    },
1296
1480
 
1297
1481
}));
1298
1482