@nlabs/reaktor 0.10.1 → 0.10.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/coverage/actions/index.html +21 -36
- package/coverage/actions/notifications.ts.html +223 -0
- package/coverage/actions/posts.ts.html +2356 -0
- package/coverage/adapters/arangoAdapter.ts.html +170 -20
- package/coverage/adapters/fileAdapter.ts.html +445 -0
- package/coverage/adapters/index.html +72 -42
- package/coverage/adapters/postAdapter.ts.html +436 -0
- package/coverage/adapters/reaktorAdapter.ts.html +201 -18
- package/coverage/adapters/tagAdapter.ts.html +274 -25
- package/coverage/adapters/userAdapter.ts.html +829 -0
- package/coverage/analyticsUtils.ts.html +286 -0
- package/coverage/config.ts.html +766 -0
- package/coverage/index.html +81 -51
- package/coverage/mocks/group.ts.html +5 -5
- package/coverage/mocks/image.ts.html +18 -12
- package/coverage/mocks/index.html +37 -7
- package/coverage/mocks/post.ts.html +8 -8
- package/coverage/mocks/tag.ts.html +2 -2
- package/coverage/mocks/user.ts.html +18 -15
- package/coverage/testUtils.ts.html +1309 -0
- package/coverage/translationQueue.ts.html +592 -0
- package/coverage/types/error.types.ts.html +148 -0
- package/coverage/types/index.html +2 -2
- package/coverage/utils/adapterUtils.ts.html +39 -27
- package/coverage/utils/analyticsUtils.ts.html +35 -41
- package/coverage/utils/authUtils.ts.html +328 -0
- package/coverage/utils/dbI18n.ts.html +280 -0
- package/coverage/utils/googleTranslate.ts.html +385 -0
- package/coverage/utils/index.html +29 -44
- package/coverage/utils/localeUtils.ts.html +193 -0
- package/coverage/utils/sessionUtils.ts.html +211 -0
- package/coverage/utils/testUtils.ts.html +1309 -0
- package/lex.config.mjs +34 -0
- package/lib/actions/apps.d.ts +25 -0
- package/lib/actions/apps.js +11 -11
- package/lib/actions/connections.d.ts +5 -0
- package/lib/actions/connections.js +6 -6
- package/lib/actions/content.d.ts +13 -0
- package/lib/actions/content.js +9 -9
- package/lib/actions/conversations.d.ts +16 -0
- package/lib/actions/conversations.js +17 -17
- package/lib/actions/dynamodb.d.ts +12 -0
- package/lib/actions/dynamodb.js +2 -2
- package/lib/actions/email.d.ts +8 -0
- package/lib/actions/email.js +2 -2
- package/lib/actions/files.d.ts +19 -0
- package/lib/actions/files.js +3 -3
- package/lib/actions/groups.d.ts +13 -0
- package/lib/actions/groups.js +15 -15
- package/lib/actions/images.d.ts +33 -0
- package/lib/actions/images.js +22 -22
- package/lib/actions/index.d.ts +27 -0
- package/lib/actions/index.js +2 -2
- package/lib/actions/ios.d.ts +7 -0
- package/lib/actions/ios.js +4 -4
- package/lib/actions/locations.d.ts +6 -0
- package/lib/actions/locations.js +3 -3
- package/lib/actions/messages.d.ts +13 -0
- package/lib/actions/messages.js +3 -3
- package/lib/actions/notifications.d.ts +9 -0
- package/lib/actions/notifications.js +2 -2
- package/lib/actions/payments.d.ts +12 -0
- package/lib/actions/payments.js +6 -6
- package/lib/actions/posts.d.ts +25 -0
- package/lib/actions/posts.js +30 -30
- package/lib/actions/profiles.d.ts +4 -0
- package/lib/actions/profiles.js +4 -4
- package/lib/actions/reactions.d.ts +32 -0
- package/lib/actions/reactions.js +16 -16
- package/lib/actions/s3.d.ts +11 -0
- package/lib/actions/s3.js +2 -2
- package/lib/actions/search.d.ts +3 -0
- package/lib/actions/search.js +3 -3
- package/lib/actions/sms.d.ts +2 -0
- package/lib/actions/sms.js +2 -2
- package/lib/actions/statistics.d.ts +4 -0
- package/lib/actions/statistics.js +4 -4
- package/lib/actions/subscriptions.d.ts +7 -0
- package/lib/actions/subscriptions.js +6 -6
- package/lib/actions/tags.d.ts +34 -0
- package/lib/actions/tags.js +6 -6
- package/lib/actions/users.d.ts +73 -0
- package/lib/actions/users.js +45 -42
- package/lib/actions/websockets.d.ts +20 -0
- package/lib/actions/websockets.js +8 -8
- package/lib/adapters/arangoAdapter.d.ts +8 -0
- package/lib/adapters/arangoAdapter.js +2 -2
- package/lib/adapters/contentAdapter.d.ts +8 -0
- package/lib/adapters/contentAdapter.js +2 -2
- package/lib/adapters/fileAdapter.d.ts +9 -0
- package/lib/adapters/fileAdapter.js +2 -2
- package/lib/adapters/imageAdapter.d.ts +8 -0
- package/lib/adapters/imageAdapter.js +2 -2
- package/lib/adapters/index.d.ts +9 -0
- package/lib/adapters/index.js +2 -0
- package/lib/adapters/messageAdapter.d.ts +8 -0
- package/lib/adapters/messageAdapter.js +2 -2
- package/lib/adapters/postAdapter.d.ts +8 -0
- package/lib/adapters/postAdapter.js +2 -2
- package/lib/adapters/reaktorAdapter.d.ts +16 -0
- package/lib/adapters/reaktorAdapter.js +2 -2
- package/lib/adapters/tagAdapter.d.ts +9 -0
- package/lib/adapters/tagAdapter.js +2 -2
- package/lib/adapters/userAdapter.d.ts +13 -0
- package/lib/adapters/userAdapter.js +2 -2
- package/lib/config.d.ts +57 -0
- package/lib/config.js +2 -2
- package/lib/handlers/graphqlHandler.d.ts +4 -0
- package/lib/handlers/graphqlHandler.js +2 -2
- package/lib/index.d.ts +19 -0
- package/lib/index.js +2 -2
- package/lib/lambdas/actions/websockets.d.ts +7 -0
- package/lib/lambdas/actions/websockets.js +6 -6
- package/lib/lambdas/authorizer.d.ts +20 -0
- package/lib/lambdas/authorizer.js +2 -2
- package/lib/lambdas/connection.d.ts +12 -0
- package/lib/lambdas/connection.js +2 -2
- package/lib/lambdas/utils/message.d.ts +1 -0
- package/lib/lambdas/utils/websocket.d.ts +7 -0
- package/lib/lambdas/utils/websocket.js +2 -2
- package/lib/mocks/conversation.d.ts +8 -0
- package/lib/mocks/file.d.ts +11 -0
- package/lib/mocks/group.d.ts +17 -0
- package/lib/mocks/group.js +2 -2
- package/lib/mocks/image.d.ts +3 -0
- package/lib/mocks/image.js +2 -2
- package/lib/mocks/post.d.ts +38 -0
- package/lib/mocks/post.js +2 -2
- package/lib/mocks/tag.d.ts +2 -0
- package/lib/mocks/tag.js +1 -1
- package/lib/mocks/user.d.ts +4 -0
- package/lib/mocks/user.js +2 -2
- package/lib/mutations/content.d.ts +2 -0
- package/lib/mutations/content.js +2 -0
- package/lib/mutations/index.d.ts +11 -0
- package/lib/mutations/index.js +2 -2
- package/lib/mutations/locations.d.ts +2 -0
- package/lib/mutations/locations.js +2 -2
- package/lib/mutations/messages.d.ts +2 -0
- package/lib/mutations/messages.js +2 -2
- package/lib/mutations/posts.d.ts +2 -0
- package/lib/mutations/posts.js +2 -2
- package/lib/mutations/profiles.d.ts +2 -0
- package/lib/mutations/profiles.js +2 -2
- package/lib/mutations/reactions.d.ts +2 -0
- package/lib/mutations/reactions.js +2 -2
- package/lib/mutations/statistics.d.ts +2 -0
- package/lib/mutations/statistics.js +2 -2
- package/lib/mutations/subscriptions.d.ts +2 -0
- package/lib/mutations/subscriptions.js +2 -2
- package/lib/mutations/tags.d.ts +2 -0
- package/lib/mutations/tags.js +2 -2
- package/lib/mutations/users.d.ts +1 -0
- package/lib/mutations/users.js +2 -2
- package/lib/objectTypes/app.d.ts +3 -0
- package/lib/objectTypes/app.js +2 -2
- package/lib/objectTypes/bankAccount.d.ts +1 -0
- package/lib/objectTypes/connection.d.ts +1 -0
- package/lib/objectTypes/connection.js +2 -2
- package/lib/objectTypes/content.d.ts +2 -0
- package/lib/objectTypes/content.js +2 -0
- package/lib/objectTypes/conversation.d.ts +2 -0
- package/lib/objectTypes/conversation.js +2 -2
- package/lib/objectTypes/creditCard.d.ts +1 -0
- package/lib/objectTypes/document.d.ts +1 -0
- package/lib/objectTypes/error.d.ts +1 -0
- package/lib/objectTypes/external.d.ts +1 -0
- package/lib/objectTypes/external.js +2 -2
- package/lib/objectTypes/file.d.ts +2 -0
- package/lib/objectTypes/file.js +2 -2
- package/lib/objectTypes/filter.d.ts +1 -0
- package/lib/objectTypes/group.d.ts +3 -0
- package/lib/objectTypes/group.js +2 -2
- package/lib/objectTypes/iapSubscription.d.ts +1 -0
- package/lib/objectTypes/image.d.ts +6 -0
- package/lib/objectTypes/image.js +2 -2
- package/lib/objectTypes/index.d.ts +26 -0
- package/lib/objectTypes/index.js +2 -2
- package/lib/objectTypes/location.d.ts +2 -0
- package/lib/objectTypes/location.js +2 -2
- package/lib/objectTypes/message.d.ts +2 -0
- package/lib/objectTypes/message.js +2 -2
- package/lib/objectTypes/passcode.d.ts +1 -0
- package/lib/objectTypes/passcode.js +2 -2
- package/lib/objectTypes/plan.d.ts +2 -0
- package/lib/objectTypes/plan.js +2 -2
- package/lib/objectTypes/post.d.ts +2 -0
- package/lib/objectTypes/post.js +2 -2
- package/lib/objectTypes/profile.d.ts +3 -0
- package/lib/objectTypes/profile.js +2 -2
- package/lib/objectTypes/reaction.d.ts +2 -0
- package/lib/objectTypes/reaction.js +2 -2
- package/lib/objectTypes/relation.d.ts +1 -0
- package/lib/objectTypes/relation.js +2 -2
- package/lib/objectTypes/search.d.ts +1 -0
- package/lib/objectTypes/search.js +2 -2
- package/lib/objectTypes/statistics.d.ts +1 -0
- package/lib/objectTypes/statistics.js +2 -2
- package/lib/objectTypes/subscription.d.ts +2 -0
- package/lib/objectTypes/subscription.js +2 -2
- package/lib/objectTypes/tag.d.ts +2 -0
- package/lib/objectTypes/tag.js +2 -2
- package/lib/objectTypes/user.d.ts +4 -0
- package/lib/objectTypes/user.js +2 -2
- package/lib/queries/content.d.ts +2 -0
- package/lib/queries/content.js +2 -0
- package/lib/queries/index.d.ts +10 -0
- package/lib/queries/index.js +2 -2
- package/lib/queries/locations.d.ts +2 -0
- package/lib/queries/locations.js +2 -2
- package/lib/queries/messages.d.ts +2 -0
- package/lib/queries/messages.js +2 -2
- package/lib/queries/posts.d.ts +2 -0
- package/lib/queries/posts.js +2 -2
- package/lib/queries/reactions.d.ts +2 -0
- package/lib/queries/reactions.js +2 -2
- package/lib/queries/statistics.d.ts +2 -0
- package/lib/queries/statistics.js +2 -2
- package/lib/queries/subscriptions.d.ts +2 -0
- package/lib/queries/subscriptions.js +2 -2
- package/lib/queries/tags.d.ts +2 -0
- package/lib/queries/tags.js +2 -2
- package/lib/queries/users.d.ts +1 -0
- package/lib/queries/users.js +2 -2
- package/lib/templates/email/layout.d.ts +2 -0
- package/lib/templates/email/passwordForgot.d.ts +2 -0
- package/lib/templates/email/passwordRecovery.d.ts +2 -0
- package/lib/templates/email/verifyEmail.d.ts +2 -0
- package/lib/templates/email/welcome.d.ts +2 -0
- package/lib/templates/sms/passwordForgot.d.ts +2 -0
- package/lib/templates/sms/passwordRecovery.d.ts +2 -0
- package/lib/templates/sms/verifyEmail.d.ts +2 -0
- package/lib/templates/sms/verifyPhone.d.ts +2 -0
- package/lib/templates/sms/welcome.d.ts +2 -0
- package/lib/types/apps.types.d.ts +50 -0
- package/lib/types/apps.types.js +1 -1
- package/lib/types/arangodb.types.d.ts +38 -0
- package/lib/types/auth.types.d.ts +15 -0
- package/lib/types/connections.types.d.ts +9 -0
- package/lib/types/content.types.d.ts +31 -0
- package/lib/types/conversations.types.d.ts +31 -0
- package/lib/types/email.types.d.ts +17 -0
- package/lib/types/error.types.d.ts +21 -0
- package/lib/types/files.types.d.ts +27 -0
- package/lib/types/google.types.d.ts +33 -0
- package/lib/types/groups.types.d.ts +22 -0
- package/lib/types/images.types.d.ts +56 -0
- package/lib/types/index.d.ts +26 -0
- package/lib/types/index.js +2 -2
- package/lib/types/locations.types.d.ts +22 -0
- package/lib/types/messages.types.d.ts +20 -0
- package/lib/types/notifications.types.d.ts +23 -0
- package/lib/types/payments.types.d.ts +113 -0
- package/lib/types/posts.types.d.ts +32 -0
- package/lib/types/profiles.types.d.ts +20 -0
- package/lib/types/statistics.types.d.ts +3 -0
- package/lib/types/tags.types.d.ts +19 -0
- package/lib/types/users.types.d.ts +110 -0
- package/lib/types/websockets.types.d.ts +22 -0
- package/lib/utils/adapterUtils.d.ts +5 -0
- package/lib/utils/analyticsUtils.d.ts +25 -0
- package/lib/utils/analyticsUtils.js +2 -2
- package/lib/utils/arangodbUtils.d.ts +70 -0
- package/lib/utils/arangodbUtils.js +3 -3
- package/lib/utils/authUtils.d.ts +23 -0
- package/lib/utils/authUtils.js +2 -2
- package/lib/utils/contextUtils.d.ts +3 -0
- package/lib/utils/contextUtils.js +1 -1
- package/lib/utils/dbI18n.d.ts +10 -0
- package/lib/utils/dbI18n.example.d.ts +20 -0
- package/lib/utils/dbI18n.example.js +3 -3
- package/lib/utils/dbI18n.js +2 -2
- package/lib/utils/googleTranslate.d.ts +6 -0
- package/lib/utils/googleTranslate.js +2 -2
- package/lib/utils/graphqlUtils.d.ts +10 -0
- package/lib/utils/graphqlUtils.js +2 -2
- package/lib/utils/index.d.ts +18 -0
- package/lib/utils/index.js +2 -2
- package/lib/utils/languageDetection.d.ts +8 -0
- package/lib/utils/languageDetection.js +1 -1
- package/lib/utils/localeUtils.d.ts +11 -0
- package/lib/utils/localeUtils.example.d.ts +5 -0
- package/lib/utils/localeUtils.example.js +2 -2
- package/lib/utils/localeUtils.js +1 -1
- package/lib/utils/middlewareUtils.d.ts +2 -0
- package/lib/utils/middlewareUtils.js +2 -2
- package/lib/utils/sessionUtils.d.ts +18 -0
- package/lib/utils/sessionUtils.js +2 -2
- package/lib/utils/stripeUtils.d.ts +7 -0
- package/lib/utils/stripeUtils.js +2 -2
- package/lib/utils/templateUtils.d.ts +3 -0
- package/lib/utils/testUtils.d.ts +95 -0
- package/lib/utils/testUtils.js +2 -2
- package/lib/utils/translationQueue.d.ts +29 -0
- package/lib/utils/translationQueue.example.d.ts +33 -0
- package/lib/utils/translationQueue.example.js +2 -2
- package/lib/utils/translationQueue.js +2 -2
- package/package.json +22 -21
- package/tsconfig.build.json +21 -0
- package/tsconfig.lint.json +33 -0
- package/tsconfig.test.json +31 -0
- package/dist/actions/apps.js +0 -242
- package/dist/actions/connections.js +0 -90
- package/dist/actions/conversations.js +0 -350
- package/dist/actions/dynamodb.js +0 -150
- package/dist/actions/email.js +0 -152
- package/dist/actions/files.js +0 -283
- package/dist/actions/groups.js +0 -292
- package/dist/actions/images.js +0 -735
- package/dist/actions/index.js +0 -66
- package/dist/actions/ios.js +0 -164
- package/dist/actions/locations.js +0 -122
- package/dist/actions/messages.js +0 -208
- package/dist/actions/notifications.js +0 -59
- package/dist/actions/payments.js +0 -497
- package/dist/actions/personas.js +0 -110
- package/dist/actions/posts.js +0 -595
- package/dist/actions/reactions.js +0 -322
- package/dist/actions/s3.js +0 -133
- package/dist/actions/search.js +0 -90
- package/dist/actions/sms.js +0 -108
- package/dist/actions/statistics.js +0 -62
- package/dist/actions/subscription.js +0 -220
- package/dist/actions/tags.js +0 -292
- package/dist/actions/users.js +0 -784
- package/dist/actions/websockets.js +0 -174
- package/dist/adapters/arangoAdapter.js +0 -46
- package/dist/adapters/fileAdapter.js +0 -76
- package/dist/adapters/imageAdapter.js +0 -40
- package/dist/adapters/messageAdapter.js +0 -49
- package/dist/adapters/postAdapter.js +0 -70
- package/dist/adapters/reaktorAdapter.js +0 -44
- package/dist/adapters/tagAdapter.js +0 -50
- package/dist/adapters/userAdapter.js +0 -115
- package/dist/config.js +0 -125
- package/dist/index.js +0 -66
- package/dist/lambdas/actions/websockets.js +0 -132
- package/dist/lambdas/authorizer.js +0 -67
- package/dist/lambdas/connection.js +0 -91
- package/dist/lambdas/utils/message.js +0 -42
- package/dist/lambdas/utils/websocket.js +0 -105
- package/dist/mocks/conversation.js +0 -35
- package/dist/mocks/file.js +0 -38
- package/dist/mocks/group.js +0 -47
- package/dist/mocks/image.js +0 -44
- package/dist/mocks/nlabs.png +0 -0
- package/dist/mocks/post.js +0 -55
- package/dist/mocks/tag.js +0 -37
- package/dist/mocks/user.js +0 -88
- package/dist/mutations/index.js +0 -26
- package/dist/mutations/locations.js +0 -44
- package/dist/mutations/messages.js +0 -86
- package/dist/mutations/personas.js +0 -100
- package/dist/mutations/posts.js +0 -53
- package/dist/mutations/reactions.js +0 -51
- package/dist/mutations/statistics.js +0 -39
- package/dist/mutations/subscriptions.js +0 -56
- package/dist/mutations/tags.js +0 -120
- package/dist/mutations/users.js +0 -116
- package/dist/objectTypes/app.js +0 -173
- package/dist/objectTypes/bankAccount.js +0 -76
- package/dist/objectTypes/connection.js +0 -48
- package/dist/objectTypes/conversation.js +0 -77
- package/dist/objectTypes/creditCard.js +0 -86
- package/dist/objectTypes/document.js +0 -46
- package/dist/objectTypes/error.js +0 -46
- package/dist/objectTypes/external.js +0 -74
- package/dist/objectTypes/file.js +0 -100
- package/dist/objectTypes/filter.js +0 -43
- package/dist/objectTypes/group.js +0 -123
- package/dist/objectTypes/iapSubscription.js +0 -40
- package/dist/objectTypes/image.js +0 -129
- package/dist/objectTypes/index.js +0 -68
- package/dist/objectTypes/location.js +0 -109
- package/dist/objectTypes/message.js +0 -96
- package/dist/objectTypes/passcode.js +0 -42
- package/dist/objectTypes/persona.js +0 -87
- package/dist/objectTypes/plan.js +0 -95
- package/dist/objectTypes/post.js +0 -125
- package/dist/objectTypes/reaction.js +0 -61
- package/dist/objectTypes/relation.js +0 -49
- package/dist/objectTypes/search.js +0 -72
- package/dist/objectTypes/statistics.js +0 -39
- package/dist/objectTypes/subscription.js +0 -117
- package/dist/objectTypes/tag.js +0 -65
- package/dist/objectTypes/user.js +0 -144
- package/dist/queries/index.js +0 -33
- package/dist/queries/locations.js +0 -45
- package/dist/queries/messages.js +0 -52
- package/dist/queries/posts.js +0 -154
- package/dist/queries/reactions.js +0 -56
- package/dist/queries/statistics.js +0 -39
- package/dist/queries/subscriptions.js +0 -44
- package/dist/queries/tags.js +0 -75
- package/dist/queries/users.js +0 -64
- package/dist/templates/email/layout.js +0 -302
- package/dist/templates/email/passwordForgot.js +0 -38
- package/dist/templates/email/passwordRecovery.js +0 -35
- package/dist/templates/email/verifyEmail.js +0 -38
- package/dist/templates/email/welcome.js +0 -38
- package/dist/templates/sms/passwordForgot.js +0 -24
- package/dist/templates/sms/passwordRecovery.js +0 -24
- package/dist/templates/sms/verifyEmail.js +0 -24
- package/dist/templates/sms/verifyPhone.js +0 -24
- package/dist/templates/sms/welcome.js +0 -24
- package/dist/types/apps.js +0 -32
- package/dist/types/arangodb.js +0 -16
- package/dist/types/auth.js +0 -16
- package/dist/types/connections.js +0 -16
- package/dist/types/conversations.js +0 -16
- package/dist/types/email.js +0 -16
- package/dist/types/error.js +0 -44
- package/dist/types/files.js +0 -16
- package/dist/types/google.js +0 -16
- package/dist/types/groups.js +0 -16
- package/dist/types/images.js +0 -16
- package/dist/types/index.js +0 -60
- package/dist/types/locations.js +0 -16
- package/dist/types/messages.js +0 -16
- package/dist/types/notifications.js +0 -16
- package/dist/types/payments.js +0 -16
- package/dist/types/personas.js +0 -16
- package/dist/types/posts.js +0 -16
- package/dist/types/statistics.js +0 -16
- package/dist/types/tags.js +0 -16
- package/dist/types/users.js +0 -16
- package/dist/types/websockets.js +0 -16
- package/dist/utils/adapterUtils.js +0 -45
- package/dist/utils/analyticsUtils.js +0 -72
- package/dist/utils/arangodbUtils.js +0 -165
- package/dist/utils/auth.js +0 -57
- package/dist/utils/index.js +0 -30
- package/dist/utils/session.js +0 -60
- package/jest.config.js +0 -17
- package/jest.setup.js +0 -36
- package/lex.config.cjs +0 -13
- package/lib/mutations/locations.integration.js +0 -2
- package/lib/mutations/messages.integration.js +0 -2
- package/lib/mutations/posts.integration.js +0 -2
- package/lib/mutations/profiles.integration.js +0 -2
- package/lib/mutations/reactions.integration.js +0 -2
- package/lib/mutations/statistics.integration.js +0 -2
- package/lib/mutations/subscriptions.integration.js +0 -2
- package/lib/mutations/tags.integration.js +0 -2
- package/lib/mutations/users.integration.js +0 -2
- package/lib/queries/locations.integration.js +0 -2
- package/lib/queries/messages.integration.js +0 -2
- package/lib/queries/posts.integration.js +0 -2
- package/lib/queries/reactions.integration.js +0 -2
- package/lib/queries/tags.integration.js +0 -2
- package/lib/queries/users.integration.js +0 -2
|
@@ -0,0 +1,1309 @@
|
|
|
1
|
+
|
|
2
|
+
<!doctype html>
|
|
3
|
+
<html lang="en">
|
|
4
|
+
|
|
5
|
+
<head>
|
|
6
|
+
<title>Code coverage report for testUtils.ts</title>
|
|
7
|
+
<meta charset="utf-8" />
|
|
8
|
+
<link rel="stylesheet" href="prettify.css" />
|
|
9
|
+
<link rel="stylesheet" href="base.css" />
|
|
10
|
+
<link rel="shortcut icon" type="image/x-icon" href="favicon.png" />
|
|
11
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
12
|
+
<style type='text/css'>
|
|
13
|
+
.coverage-summary .sorter {
|
|
14
|
+
background-image: url(sort-arrow-sprite.png);
|
|
15
|
+
}
|
|
16
|
+
</style>
|
|
17
|
+
</head>
|
|
18
|
+
|
|
19
|
+
<body>
|
|
20
|
+
<div class='wrapper'>
|
|
21
|
+
<div class='pad1'>
|
|
22
|
+
<h1><a href="index.html">All files</a> testUtils.ts</h1>
|
|
23
|
+
<div class='clearfix'>
|
|
24
|
+
|
|
25
|
+
<div class='fl pad1y space-right2'>
|
|
26
|
+
<span class="strong">31.88% </span>
|
|
27
|
+
<span class="quiet">Statements</span>
|
|
28
|
+
<span class='fraction'>44/138</span>
|
|
29
|
+
</div>
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
<div class='fl pad1y space-right2'>
|
|
33
|
+
<span class="strong">30.3% </span>
|
|
34
|
+
<span class="quiet">Branches</span>
|
|
35
|
+
<span class='fraction'>10/33</span>
|
|
36
|
+
</div>
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
<div class='fl pad1y space-right2'>
|
|
40
|
+
<span class="strong">16.39% </span>
|
|
41
|
+
<span class="quiet">Functions</span>
|
|
42
|
+
<span class='fraction'>10/61</span>
|
|
43
|
+
</div>
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
<div class='fl pad1y space-right2'>
|
|
47
|
+
<span class="strong">33.06% </span>
|
|
48
|
+
<span class="quiet">Lines</span>
|
|
49
|
+
<span class='fraction'>41/124</span>
|
|
50
|
+
</div>
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
</div>
|
|
54
|
+
<p class="quiet">
|
|
55
|
+
Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
|
|
56
|
+
</p>
|
|
57
|
+
<template id="filterTemplate">
|
|
58
|
+
<div class="quiet">
|
|
59
|
+
Filter:
|
|
60
|
+
<input type="search" id="fileSearch">
|
|
61
|
+
</div>
|
|
62
|
+
</template>
|
|
63
|
+
</div>
|
|
64
|
+
<div class='status-line low'></div>
|
|
65
|
+
<pre><table class="coverage">
|
|
66
|
+
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
|
|
67
|
+
<a name='L2'></a><a href='#L2'>2</a>
|
|
68
|
+
<a name='L3'></a><a href='#L3'>3</a>
|
|
69
|
+
<a name='L4'></a><a href='#L4'>4</a>
|
|
70
|
+
<a name='L5'></a><a href='#L5'>5</a>
|
|
71
|
+
<a name='L6'></a><a href='#L6'>6</a>
|
|
72
|
+
<a name='L7'></a><a href='#L7'>7</a>
|
|
73
|
+
<a name='L8'></a><a href='#L8'>8</a>
|
|
74
|
+
<a name='L9'></a><a href='#L9'>9</a>
|
|
75
|
+
<a name='L10'></a><a href='#L10'>10</a>
|
|
76
|
+
<a name='L11'></a><a href='#L11'>11</a>
|
|
77
|
+
<a name='L12'></a><a href='#L12'>12</a>
|
|
78
|
+
<a name='L13'></a><a href='#L13'>13</a>
|
|
79
|
+
<a name='L14'></a><a href='#L14'>14</a>
|
|
80
|
+
<a name='L15'></a><a href='#L15'>15</a>
|
|
81
|
+
<a name='L16'></a><a href='#L16'>16</a>
|
|
82
|
+
<a name='L17'></a><a href='#L17'>17</a>
|
|
83
|
+
<a name='L18'></a><a href='#L18'>18</a>
|
|
84
|
+
<a name='L19'></a><a href='#L19'>19</a>
|
|
85
|
+
<a name='L20'></a><a href='#L20'>20</a>
|
|
86
|
+
<a name='L21'></a><a href='#L21'>21</a>
|
|
87
|
+
<a name='L22'></a><a href='#L22'>22</a>
|
|
88
|
+
<a name='L23'></a><a href='#L23'>23</a>
|
|
89
|
+
<a name='L24'></a><a href='#L24'>24</a>
|
|
90
|
+
<a name='L25'></a><a href='#L25'>25</a>
|
|
91
|
+
<a name='L26'></a><a href='#L26'>26</a>
|
|
92
|
+
<a name='L27'></a><a href='#L27'>27</a>
|
|
93
|
+
<a name='L28'></a><a href='#L28'>28</a>
|
|
94
|
+
<a name='L29'></a><a href='#L29'>29</a>
|
|
95
|
+
<a name='L30'></a><a href='#L30'>30</a>
|
|
96
|
+
<a name='L31'></a><a href='#L31'>31</a>
|
|
97
|
+
<a name='L32'></a><a href='#L32'>32</a>
|
|
98
|
+
<a name='L33'></a><a href='#L33'>33</a>
|
|
99
|
+
<a name='L34'></a><a href='#L34'>34</a>
|
|
100
|
+
<a name='L35'></a><a href='#L35'>35</a>
|
|
101
|
+
<a name='L36'></a><a href='#L36'>36</a>
|
|
102
|
+
<a name='L37'></a><a href='#L37'>37</a>
|
|
103
|
+
<a name='L38'></a><a href='#L38'>38</a>
|
|
104
|
+
<a name='L39'></a><a href='#L39'>39</a>
|
|
105
|
+
<a name='L40'></a><a href='#L40'>40</a>
|
|
106
|
+
<a name='L41'></a><a href='#L41'>41</a>
|
|
107
|
+
<a name='L42'></a><a href='#L42'>42</a>
|
|
108
|
+
<a name='L43'></a><a href='#L43'>43</a>
|
|
109
|
+
<a name='L44'></a><a href='#L44'>44</a>
|
|
110
|
+
<a name='L45'></a><a href='#L45'>45</a>
|
|
111
|
+
<a name='L46'></a><a href='#L46'>46</a>
|
|
112
|
+
<a name='L47'></a><a href='#L47'>47</a>
|
|
113
|
+
<a name='L48'></a><a href='#L48'>48</a>
|
|
114
|
+
<a name='L49'></a><a href='#L49'>49</a>
|
|
115
|
+
<a name='L50'></a><a href='#L50'>50</a>
|
|
116
|
+
<a name='L51'></a><a href='#L51'>51</a>
|
|
117
|
+
<a name='L52'></a><a href='#L52'>52</a>
|
|
118
|
+
<a name='L53'></a><a href='#L53'>53</a>
|
|
119
|
+
<a name='L54'></a><a href='#L54'>54</a>
|
|
120
|
+
<a name='L55'></a><a href='#L55'>55</a>
|
|
121
|
+
<a name='L56'></a><a href='#L56'>56</a>
|
|
122
|
+
<a name='L57'></a><a href='#L57'>57</a>
|
|
123
|
+
<a name='L58'></a><a href='#L58'>58</a>
|
|
124
|
+
<a name='L59'></a><a href='#L59'>59</a>
|
|
125
|
+
<a name='L60'></a><a href='#L60'>60</a>
|
|
126
|
+
<a name='L61'></a><a href='#L61'>61</a>
|
|
127
|
+
<a name='L62'></a><a href='#L62'>62</a>
|
|
128
|
+
<a name='L63'></a><a href='#L63'>63</a>
|
|
129
|
+
<a name='L64'></a><a href='#L64'>64</a>
|
|
130
|
+
<a name='L65'></a><a href='#L65'>65</a>
|
|
131
|
+
<a name='L66'></a><a href='#L66'>66</a>
|
|
132
|
+
<a name='L67'></a><a href='#L67'>67</a>
|
|
133
|
+
<a name='L68'></a><a href='#L68'>68</a>
|
|
134
|
+
<a name='L69'></a><a href='#L69'>69</a>
|
|
135
|
+
<a name='L70'></a><a href='#L70'>70</a>
|
|
136
|
+
<a name='L71'></a><a href='#L71'>71</a>
|
|
137
|
+
<a name='L72'></a><a href='#L72'>72</a>
|
|
138
|
+
<a name='L73'></a><a href='#L73'>73</a>
|
|
139
|
+
<a name='L74'></a><a href='#L74'>74</a>
|
|
140
|
+
<a name='L75'></a><a href='#L75'>75</a>
|
|
141
|
+
<a name='L76'></a><a href='#L76'>76</a>
|
|
142
|
+
<a name='L77'></a><a href='#L77'>77</a>
|
|
143
|
+
<a name='L78'></a><a href='#L78'>78</a>
|
|
144
|
+
<a name='L79'></a><a href='#L79'>79</a>
|
|
145
|
+
<a name='L80'></a><a href='#L80'>80</a>
|
|
146
|
+
<a name='L81'></a><a href='#L81'>81</a>
|
|
147
|
+
<a name='L82'></a><a href='#L82'>82</a>
|
|
148
|
+
<a name='L83'></a><a href='#L83'>83</a>
|
|
149
|
+
<a name='L84'></a><a href='#L84'>84</a>
|
|
150
|
+
<a name='L85'></a><a href='#L85'>85</a>
|
|
151
|
+
<a name='L86'></a><a href='#L86'>86</a>
|
|
152
|
+
<a name='L87'></a><a href='#L87'>87</a>
|
|
153
|
+
<a name='L88'></a><a href='#L88'>88</a>
|
|
154
|
+
<a name='L89'></a><a href='#L89'>89</a>
|
|
155
|
+
<a name='L90'></a><a href='#L90'>90</a>
|
|
156
|
+
<a name='L91'></a><a href='#L91'>91</a>
|
|
157
|
+
<a name='L92'></a><a href='#L92'>92</a>
|
|
158
|
+
<a name='L93'></a><a href='#L93'>93</a>
|
|
159
|
+
<a name='L94'></a><a href='#L94'>94</a>
|
|
160
|
+
<a name='L95'></a><a href='#L95'>95</a>
|
|
161
|
+
<a name='L96'></a><a href='#L96'>96</a>
|
|
162
|
+
<a name='L97'></a><a href='#L97'>97</a>
|
|
163
|
+
<a name='L98'></a><a href='#L98'>98</a>
|
|
164
|
+
<a name='L99'></a><a href='#L99'>99</a>
|
|
165
|
+
<a name='L100'></a><a href='#L100'>100</a>
|
|
166
|
+
<a name='L101'></a><a href='#L101'>101</a>
|
|
167
|
+
<a name='L102'></a><a href='#L102'>102</a>
|
|
168
|
+
<a name='L103'></a><a href='#L103'>103</a>
|
|
169
|
+
<a name='L104'></a><a href='#L104'>104</a>
|
|
170
|
+
<a name='L105'></a><a href='#L105'>105</a>
|
|
171
|
+
<a name='L106'></a><a href='#L106'>106</a>
|
|
172
|
+
<a name='L107'></a><a href='#L107'>107</a>
|
|
173
|
+
<a name='L108'></a><a href='#L108'>108</a>
|
|
174
|
+
<a name='L109'></a><a href='#L109'>109</a>
|
|
175
|
+
<a name='L110'></a><a href='#L110'>110</a>
|
|
176
|
+
<a name='L111'></a><a href='#L111'>111</a>
|
|
177
|
+
<a name='L112'></a><a href='#L112'>112</a>
|
|
178
|
+
<a name='L113'></a><a href='#L113'>113</a>
|
|
179
|
+
<a name='L114'></a><a href='#L114'>114</a>
|
|
180
|
+
<a name='L115'></a><a href='#L115'>115</a>
|
|
181
|
+
<a name='L116'></a><a href='#L116'>116</a>
|
|
182
|
+
<a name='L117'></a><a href='#L117'>117</a>
|
|
183
|
+
<a name='L118'></a><a href='#L118'>118</a>
|
|
184
|
+
<a name='L119'></a><a href='#L119'>119</a>
|
|
185
|
+
<a name='L120'></a><a href='#L120'>120</a>
|
|
186
|
+
<a name='L121'></a><a href='#L121'>121</a>
|
|
187
|
+
<a name='L122'></a><a href='#L122'>122</a>
|
|
188
|
+
<a name='L123'></a><a href='#L123'>123</a>
|
|
189
|
+
<a name='L124'></a><a href='#L124'>124</a>
|
|
190
|
+
<a name='L125'></a><a href='#L125'>125</a>
|
|
191
|
+
<a name='L126'></a><a href='#L126'>126</a>
|
|
192
|
+
<a name='L127'></a><a href='#L127'>127</a>
|
|
193
|
+
<a name='L128'></a><a href='#L128'>128</a>
|
|
194
|
+
<a name='L129'></a><a href='#L129'>129</a>
|
|
195
|
+
<a name='L130'></a><a href='#L130'>130</a>
|
|
196
|
+
<a name='L131'></a><a href='#L131'>131</a>
|
|
197
|
+
<a name='L132'></a><a href='#L132'>132</a>
|
|
198
|
+
<a name='L133'></a><a href='#L133'>133</a>
|
|
199
|
+
<a name='L134'></a><a href='#L134'>134</a>
|
|
200
|
+
<a name='L135'></a><a href='#L135'>135</a>
|
|
201
|
+
<a name='L136'></a><a href='#L136'>136</a>
|
|
202
|
+
<a name='L137'></a><a href='#L137'>137</a>
|
|
203
|
+
<a name='L138'></a><a href='#L138'>138</a>
|
|
204
|
+
<a name='L139'></a><a href='#L139'>139</a>
|
|
205
|
+
<a name='L140'></a><a href='#L140'>140</a>
|
|
206
|
+
<a name='L141'></a><a href='#L141'>141</a>
|
|
207
|
+
<a name='L142'></a><a href='#L142'>142</a>
|
|
208
|
+
<a name='L143'></a><a href='#L143'>143</a>
|
|
209
|
+
<a name='L144'></a><a href='#L144'>144</a>
|
|
210
|
+
<a name='L145'></a><a href='#L145'>145</a>
|
|
211
|
+
<a name='L146'></a><a href='#L146'>146</a>
|
|
212
|
+
<a name='L147'></a><a href='#L147'>147</a>
|
|
213
|
+
<a name='L148'></a><a href='#L148'>148</a>
|
|
214
|
+
<a name='L149'></a><a href='#L149'>149</a>
|
|
215
|
+
<a name='L150'></a><a href='#L150'>150</a>
|
|
216
|
+
<a name='L151'></a><a href='#L151'>151</a>
|
|
217
|
+
<a name='L152'></a><a href='#L152'>152</a>
|
|
218
|
+
<a name='L153'></a><a href='#L153'>153</a>
|
|
219
|
+
<a name='L154'></a><a href='#L154'>154</a>
|
|
220
|
+
<a name='L155'></a><a href='#L155'>155</a>
|
|
221
|
+
<a name='L156'></a><a href='#L156'>156</a>
|
|
222
|
+
<a name='L157'></a><a href='#L157'>157</a>
|
|
223
|
+
<a name='L158'></a><a href='#L158'>158</a>
|
|
224
|
+
<a name='L159'></a><a href='#L159'>159</a>
|
|
225
|
+
<a name='L160'></a><a href='#L160'>160</a>
|
|
226
|
+
<a name='L161'></a><a href='#L161'>161</a>
|
|
227
|
+
<a name='L162'></a><a href='#L162'>162</a>
|
|
228
|
+
<a name='L163'></a><a href='#L163'>163</a>
|
|
229
|
+
<a name='L164'></a><a href='#L164'>164</a>
|
|
230
|
+
<a name='L165'></a><a href='#L165'>165</a>
|
|
231
|
+
<a name='L166'></a><a href='#L166'>166</a>
|
|
232
|
+
<a name='L167'></a><a href='#L167'>167</a>
|
|
233
|
+
<a name='L168'></a><a href='#L168'>168</a>
|
|
234
|
+
<a name='L169'></a><a href='#L169'>169</a>
|
|
235
|
+
<a name='L170'></a><a href='#L170'>170</a>
|
|
236
|
+
<a name='L171'></a><a href='#L171'>171</a>
|
|
237
|
+
<a name='L172'></a><a href='#L172'>172</a>
|
|
238
|
+
<a name='L173'></a><a href='#L173'>173</a>
|
|
239
|
+
<a name='L174'></a><a href='#L174'>174</a>
|
|
240
|
+
<a name='L175'></a><a href='#L175'>175</a>
|
|
241
|
+
<a name='L176'></a><a href='#L176'>176</a>
|
|
242
|
+
<a name='L177'></a><a href='#L177'>177</a>
|
|
243
|
+
<a name='L178'></a><a href='#L178'>178</a>
|
|
244
|
+
<a name='L179'></a><a href='#L179'>179</a>
|
|
245
|
+
<a name='L180'></a><a href='#L180'>180</a>
|
|
246
|
+
<a name='L181'></a><a href='#L181'>181</a>
|
|
247
|
+
<a name='L182'></a><a href='#L182'>182</a>
|
|
248
|
+
<a name='L183'></a><a href='#L183'>183</a>
|
|
249
|
+
<a name='L184'></a><a href='#L184'>184</a>
|
|
250
|
+
<a name='L185'></a><a href='#L185'>185</a>
|
|
251
|
+
<a name='L186'></a><a href='#L186'>186</a>
|
|
252
|
+
<a name='L187'></a><a href='#L187'>187</a>
|
|
253
|
+
<a name='L188'></a><a href='#L188'>188</a>
|
|
254
|
+
<a name='L189'></a><a href='#L189'>189</a>
|
|
255
|
+
<a name='L190'></a><a href='#L190'>190</a>
|
|
256
|
+
<a name='L191'></a><a href='#L191'>191</a>
|
|
257
|
+
<a name='L192'></a><a href='#L192'>192</a>
|
|
258
|
+
<a name='L193'></a><a href='#L193'>193</a>
|
|
259
|
+
<a name='L194'></a><a href='#L194'>194</a>
|
|
260
|
+
<a name='L195'></a><a href='#L195'>195</a>
|
|
261
|
+
<a name='L196'></a><a href='#L196'>196</a>
|
|
262
|
+
<a name='L197'></a><a href='#L197'>197</a>
|
|
263
|
+
<a name='L198'></a><a href='#L198'>198</a>
|
|
264
|
+
<a name='L199'></a><a href='#L199'>199</a>
|
|
265
|
+
<a name='L200'></a><a href='#L200'>200</a>
|
|
266
|
+
<a name='L201'></a><a href='#L201'>201</a>
|
|
267
|
+
<a name='L202'></a><a href='#L202'>202</a>
|
|
268
|
+
<a name='L203'></a><a href='#L203'>203</a>
|
|
269
|
+
<a name='L204'></a><a href='#L204'>204</a>
|
|
270
|
+
<a name='L205'></a><a href='#L205'>205</a>
|
|
271
|
+
<a name='L206'></a><a href='#L206'>206</a>
|
|
272
|
+
<a name='L207'></a><a href='#L207'>207</a>
|
|
273
|
+
<a name='L208'></a><a href='#L208'>208</a>
|
|
274
|
+
<a name='L209'></a><a href='#L209'>209</a>
|
|
275
|
+
<a name='L210'></a><a href='#L210'>210</a>
|
|
276
|
+
<a name='L211'></a><a href='#L211'>211</a>
|
|
277
|
+
<a name='L212'></a><a href='#L212'>212</a>
|
|
278
|
+
<a name='L213'></a><a href='#L213'>213</a>
|
|
279
|
+
<a name='L214'></a><a href='#L214'>214</a>
|
|
280
|
+
<a name='L215'></a><a href='#L215'>215</a>
|
|
281
|
+
<a name='L216'></a><a href='#L216'>216</a>
|
|
282
|
+
<a name='L217'></a><a href='#L217'>217</a>
|
|
283
|
+
<a name='L218'></a><a href='#L218'>218</a>
|
|
284
|
+
<a name='L219'></a><a href='#L219'>219</a>
|
|
285
|
+
<a name='L220'></a><a href='#L220'>220</a>
|
|
286
|
+
<a name='L221'></a><a href='#L221'>221</a>
|
|
287
|
+
<a name='L222'></a><a href='#L222'>222</a>
|
|
288
|
+
<a name='L223'></a><a href='#L223'>223</a>
|
|
289
|
+
<a name='L224'></a><a href='#L224'>224</a>
|
|
290
|
+
<a name='L225'></a><a href='#L225'>225</a>
|
|
291
|
+
<a name='L226'></a><a href='#L226'>226</a>
|
|
292
|
+
<a name='L227'></a><a href='#L227'>227</a>
|
|
293
|
+
<a name='L228'></a><a href='#L228'>228</a>
|
|
294
|
+
<a name='L229'></a><a href='#L229'>229</a>
|
|
295
|
+
<a name='L230'></a><a href='#L230'>230</a>
|
|
296
|
+
<a name='L231'></a><a href='#L231'>231</a>
|
|
297
|
+
<a name='L232'></a><a href='#L232'>232</a>
|
|
298
|
+
<a name='L233'></a><a href='#L233'>233</a>
|
|
299
|
+
<a name='L234'></a><a href='#L234'>234</a>
|
|
300
|
+
<a name='L235'></a><a href='#L235'>235</a>
|
|
301
|
+
<a name='L236'></a><a href='#L236'>236</a>
|
|
302
|
+
<a name='L237'></a><a href='#L237'>237</a>
|
|
303
|
+
<a name='L238'></a><a href='#L238'>238</a>
|
|
304
|
+
<a name='L239'></a><a href='#L239'>239</a>
|
|
305
|
+
<a name='L240'></a><a href='#L240'>240</a>
|
|
306
|
+
<a name='L241'></a><a href='#L241'>241</a>
|
|
307
|
+
<a name='L242'></a><a href='#L242'>242</a>
|
|
308
|
+
<a name='L243'></a><a href='#L243'>243</a>
|
|
309
|
+
<a name='L244'></a><a href='#L244'>244</a>
|
|
310
|
+
<a name='L245'></a><a href='#L245'>245</a>
|
|
311
|
+
<a name='L246'></a><a href='#L246'>246</a>
|
|
312
|
+
<a name='L247'></a><a href='#L247'>247</a>
|
|
313
|
+
<a name='L248'></a><a href='#L248'>248</a>
|
|
314
|
+
<a name='L249'></a><a href='#L249'>249</a>
|
|
315
|
+
<a name='L250'></a><a href='#L250'>250</a>
|
|
316
|
+
<a name='L251'></a><a href='#L251'>251</a>
|
|
317
|
+
<a name='L252'></a><a href='#L252'>252</a>
|
|
318
|
+
<a name='L253'></a><a href='#L253'>253</a>
|
|
319
|
+
<a name='L254'></a><a href='#L254'>254</a>
|
|
320
|
+
<a name='L255'></a><a href='#L255'>255</a>
|
|
321
|
+
<a name='L256'></a><a href='#L256'>256</a>
|
|
322
|
+
<a name='L257'></a><a href='#L257'>257</a>
|
|
323
|
+
<a name='L258'></a><a href='#L258'>258</a>
|
|
324
|
+
<a name='L259'></a><a href='#L259'>259</a>
|
|
325
|
+
<a name='L260'></a><a href='#L260'>260</a>
|
|
326
|
+
<a name='L261'></a><a href='#L261'>261</a>
|
|
327
|
+
<a name='L262'></a><a href='#L262'>262</a>
|
|
328
|
+
<a name='L263'></a><a href='#L263'>263</a>
|
|
329
|
+
<a name='L264'></a><a href='#L264'>264</a>
|
|
330
|
+
<a name='L265'></a><a href='#L265'>265</a>
|
|
331
|
+
<a name='L266'></a><a href='#L266'>266</a>
|
|
332
|
+
<a name='L267'></a><a href='#L267'>267</a>
|
|
333
|
+
<a name='L268'></a><a href='#L268'>268</a>
|
|
334
|
+
<a name='L269'></a><a href='#L269'>269</a>
|
|
335
|
+
<a name='L270'></a><a href='#L270'>270</a>
|
|
336
|
+
<a name='L271'></a><a href='#L271'>271</a>
|
|
337
|
+
<a name='L272'></a><a href='#L272'>272</a>
|
|
338
|
+
<a name='L273'></a><a href='#L273'>273</a>
|
|
339
|
+
<a name='L274'></a><a href='#L274'>274</a>
|
|
340
|
+
<a name='L275'></a><a href='#L275'>275</a>
|
|
341
|
+
<a name='L276'></a><a href='#L276'>276</a>
|
|
342
|
+
<a name='L277'></a><a href='#L277'>277</a>
|
|
343
|
+
<a name='L278'></a><a href='#L278'>278</a>
|
|
344
|
+
<a name='L279'></a><a href='#L279'>279</a>
|
|
345
|
+
<a name='L280'></a><a href='#L280'>280</a>
|
|
346
|
+
<a name='L281'></a><a href='#L281'>281</a>
|
|
347
|
+
<a name='L282'></a><a href='#L282'>282</a>
|
|
348
|
+
<a name='L283'></a><a href='#L283'>283</a>
|
|
349
|
+
<a name='L284'></a><a href='#L284'>284</a>
|
|
350
|
+
<a name='L285'></a><a href='#L285'>285</a>
|
|
351
|
+
<a name='L286'></a><a href='#L286'>286</a>
|
|
352
|
+
<a name='L287'></a><a href='#L287'>287</a>
|
|
353
|
+
<a name='L288'></a><a href='#L288'>288</a>
|
|
354
|
+
<a name='L289'></a><a href='#L289'>289</a>
|
|
355
|
+
<a name='L290'></a><a href='#L290'>290</a>
|
|
356
|
+
<a name='L291'></a><a href='#L291'>291</a>
|
|
357
|
+
<a name='L292'></a><a href='#L292'>292</a>
|
|
358
|
+
<a name='L293'></a><a href='#L293'>293</a>
|
|
359
|
+
<a name='L294'></a><a href='#L294'>294</a>
|
|
360
|
+
<a name='L295'></a><a href='#L295'>295</a>
|
|
361
|
+
<a name='L296'></a><a href='#L296'>296</a>
|
|
362
|
+
<a name='L297'></a><a href='#L297'>297</a>
|
|
363
|
+
<a name='L298'></a><a href='#L298'>298</a>
|
|
364
|
+
<a name='L299'></a><a href='#L299'>299</a>
|
|
365
|
+
<a name='L300'></a><a href='#L300'>300</a>
|
|
366
|
+
<a name='L301'></a><a href='#L301'>301</a>
|
|
367
|
+
<a name='L302'></a><a href='#L302'>302</a>
|
|
368
|
+
<a name='L303'></a><a href='#L303'>303</a>
|
|
369
|
+
<a name='L304'></a><a href='#L304'>304</a>
|
|
370
|
+
<a name='L305'></a><a href='#L305'>305</a>
|
|
371
|
+
<a name='L306'></a><a href='#L306'>306</a>
|
|
372
|
+
<a name='L307'></a><a href='#L307'>307</a>
|
|
373
|
+
<a name='L308'></a><a href='#L308'>308</a>
|
|
374
|
+
<a name='L309'></a><a href='#L309'>309</a>
|
|
375
|
+
<a name='L310'></a><a href='#L310'>310</a>
|
|
376
|
+
<a name='L311'></a><a href='#L311'>311</a>
|
|
377
|
+
<a name='L312'></a><a href='#L312'>312</a>
|
|
378
|
+
<a name='L313'></a><a href='#L313'>313</a>
|
|
379
|
+
<a name='L314'></a><a href='#L314'>314</a>
|
|
380
|
+
<a name='L315'></a><a href='#L315'>315</a>
|
|
381
|
+
<a name='L316'></a><a href='#L316'>316</a>
|
|
382
|
+
<a name='L317'></a><a href='#L317'>317</a>
|
|
383
|
+
<a name='L318'></a><a href='#L318'>318</a>
|
|
384
|
+
<a name='L319'></a><a href='#L319'>319</a>
|
|
385
|
+
<a name='L320'></a><a href='#L320'>320</a>
|
|
386
|
+
<a name='L321'></a><a href='#L321'>321</a>
|
|
387
|
+
<a name='L322'></a><a href='#L322'>322</a>
|
|
388
|
+
<a name='L323'></a><a href='#L323'>323</a>
|
|
389
|
+
<a name='L324'></a><a href='#L324'>324</a>
|
|
390
|
+
<a name='L325'></a><a href='#L325'>325</a>
|
|
391
|
+
<a name='L326'></a><a href='#L326'>326</a>
|
|
392
|
+
<a name='L327'></a><a href='#L327'>327</a>
|
|
393
|
+
<a name='L328'></a><a href='#L328'>328</a>
|
|
394
|
+
<a name='L329'></a><a href='#L329'>329</a>
|
|
395
|
+
<a name='L330'></a><a href='#L330'>330</a>
|
|
396
|
+
<a name='L331'></a><a href='#L331'>331</a>
|
|
397
|
+
<a name='L332'></a><a href='#L332'>332</a>
|
|
398
|
+
<a name='L333'></a><a href='#L333'>333</a>
|
|
399
|
+
<a name='L334'></a><a href='#L334'>334</a>
|
|
400
|
+
<a name='L335'></a><a href='#L335'>335</a>
|
|
401
|
+
<a name='L336'></a><a href='#L336'>336</a>
|
|
402
|
+
<a name='L337'></a><a href='#L337'>337</a>
|
|
403
|
+
<a name='L338'></a><a href='#L338'>338</a>
|
|
404
|
+
<a name='L339'></a><a href='#L339'>339</a>
|
|
405
|
+
<a name='L340'></a><a href='#L340'>340</a>
|
|
406
|
+
<a name='L341'></a><a href='#L341'>341</a>
|
|
407
|
+
<a name='L342'></a><a href='#L342'>342</a>
|
|
408
|
+
<a name='L343'></a><a href='#L343'>343</a>
|
|
409
|
+
<a name='L344'></a><a href='#L344'>344</a>
|
|
410
|
+
<a name='L345'></a><a href='#L345'>345</a>
|
|
411
|
+
<a name='L346'></a><a href='#L346'>346</a>
|
|
412
|
+
<a name='L347'></a><a href='#L347'>347</a>
|
|
413
|
+
<a name='L348'></a><a href='#L348'>348</a>
|
|
414
|
+
<a name='L349'></a><a href='#L349'>349</a>
|
|
415
|
+
<a name='L350'></a><a href='#L350'>350</a>
|
|
416
|
+
<a name='L351'></a><a href='#L351'>351</a>
|
|
417
|
+
<a name='L352'></a><a href='#L352'>352</a>
|
|
418
|
+
<a name='L353'></a><a href='#L353'>353</a>
|
|
419
|
+
<a name='L354'></a><a href='#L354'>354</a>
|
|
420
|
+
<a name='L355'></a><a href='#L355'>355</a>
|
|
421
|
+
<a name='L356'></a><a href='#L356'>356</a>
|
|
422
|
+
<a name='L357'></a><a href='#L357'>357</a>
|
|
423
|
+
<a name='L358'></a><a href='#L358'>358</a>
|
|
424
|
+
<a name='L359'></a><a href='#L359'>359</a>
|
|
425
|
+
<a name='L360'></a><a href='#L360'>360</a>
|
|
426
|
+
<a name='L361'></a><a href='#L361'>361</a>
|
|
427
|
+
<a name='L362'></a><a href='#L362'>362</a>
|
|
428
|
+
<a name='L363'></a><a href='#L363'>363</a>
|
|
429
|
+
<a name='L364'></a><a href='#L364'>364</a>
|
|
430
|
+
<a name='L365'></a><a href='#L365'>365</a>
|
|
431
|
+
<a name='L366'></a><a href='#L366'>366</a>
|
|
432
|
+
<a name='L367'></a><a href='#L367'>367</a>
|
|
433
|
+
<a name='L368'></a><a href='#L368'>368</a>
|
|
434
|
+
<a name='L369'></a><a href='#L369'>369</a>
|
|
435
|
+
<a name='L370'></a><a href='#L370'>370</a>
|
|
436
|
+
<a name='L371'></a><a href='#L371'>371</a>
|
|
437
|
+
<a name='L372'></a><a href='#L372'>372</a>
|
|
438
|
+
<a name='L373'></a><a href='#L373'>373</a>
|
|
439
|
+
<a name='L374'></a><a href='#L374'>374</a>
|
|
440
|
+
<a name='L375'></a><a href='#L375'>375</a>
|
|
441
|
+
<a name='L376'></a><a href='#L376'>376</a>
|
|
442
|
+
<a name='L377'></a><a href='#L377'>377</a>
|
|
443
|
+
<a name='L378'></a><a href='#L378'>378</a>
|
|
444
|
+
<a name='L379'></a><a href='#L379'>379</a>
|
|
445
|
+
<a name='L380'></a><a href='#L380'>380</a>
|
|
446
|
+
<a name='L381'></a><a href='#L381'>381</a>
|
|
447
|
+
<a name='L382'></a><a href='#L382'>382</a>
|
|
448
|
+
<a name='L383'></a><a href='#L383'>383</a>
|
|
449
|
+
<a name='L384'></a><a href='#L384'>384</a>
|
|
450
|
+
<a name='L385'></a><a href='#L385'>385</a>
|
|
451
|
+
<a name='L386'></a><a href='#L386'>386</a>
|
|
452
|
+
<a name='L387'></a><a href='#L387'>387</a>
|
|
453
|
+
<a name='L388'></a><a href='#L388'>388</a>
|
|
454
|
+
<a name='L389'></a><a href='#L389'>389</a>
|
|
455
|
+
<a name='L390'></a><a href='#L390'>390</a>
|
|
456
|
+
<a name='L391'></a><a href='#L391'>391</a>
|
|
457
|
+
<a name='L392'></a><a href='#L392'>392</a>
|
|
458
|
+
<a name='L393'></a><a href='#L393'>393</a>
|
|
459
|
+
<a name='L394'></a><a href='#L394'>394</a>
|
|
460
|
+
<a name='L395'></a><a href='#L395'>395</a>
|
|
461
|
+
<a name='L396'></a><a href='#L396'>396</a>
|
|
462
|
+
<a name='L397'></a><a href='#L397'>397</a>
|
|
463
|
+
<a name='L398'></a><a href='#L398'>398</a>
|
|
464
|
+
<a name='L399'></a><a href='#L399'>399</a>
|
|
465
|
+
<a name='L400'></a><a href='#L400'>400</a>
|
|
466
|
+
<a name='L401'></a><a href='#L401'>401</a>
|
|
467
|
+
<a name='L402'></a><a href='#L402'>402</a>
|
|
468
|
+
<a name='L403'></a><a href='#L403'>403</a>
|
|
469
|
+
<a name='L404'></a><a href='#L404'>404</a>
|
|
470
|
+
<a name='L405'></a><a href='#L405'>405</a>
|
|
471
|
+
<a name='L406'></a><a href='#L406'>406</a>
|
|
472
|
+
<a name='L407'></a><a href='#L407'>407</a>
|
|
473
|
+
<a name='L408'></a><a href='#L408'>408</a>
|
|
474
|
+
<a name='L409'></a><a href='#L409'>409</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span>
|
|
475
|
+
<span class="cline-any cline-neutral"> </span>
|
|
476
|
+
<span class="cline-any cline-neutral"> </span>
|
|
477
|
+
<span class="cline-any cline-neutral"> </span>
|
|
478
|
+
<span class="cline-any cline-neutral"> </span>
|
|
479
|
+
<span class="cline-any cline-neutral"> </span>
|
|
480
|
+
<span class="cline-any cline-neutral"> </span>
|
|
481
|
+
<span class="cline-any cline-neutral"> </span>
|
|
482
|
+
<span class="cline-any cline-neutral"> </span>
|
|
483
|
+
<span class="cline-any cline-neutral"> </span>
|
|
484
|
+
<span class="cline-any cline-neutral"> </span>
|
|
485
|
+
<span class="cline-any cline-neutral"> </span>
|
|
486
|
+
<span class="cline-any cline-neutral"> </span>
|
|
487
|
+
<span class="cline-any cline-neutral"> </span>
|
|
488
|
+
<span class="cline-any cline-neutral"> </span>
|
|
489
|
+
<span class="cline-any cline-neutral"> </span>
|
|
490
|
+
<span class="cline-any cline-yes">1x</span>
|
|
491
|
+
<span class="cline-any cline-yes">1x</span>
|
|
492
|
+
<span class="cline-any cline-neutral"> </span>
|
|
493
|
+
<span class="cline-any cline-neutral"> </span>
|
|
494
|
+
<span class="cline-any cline-neutral"> </span>
|
|
495
|
+
<span class="cline-any cline-neutral"> </span>
|
|
496
|
+
<span class="cline-any cline-yes">1x</span>
|
|
497
|
+
<span class="cline-any cline-yes">1x</span>
|
|
498
|
+
<span class="cline-any cline-neutral"> </span>
|
|
499
|
+
<span class="cline-any cline-neutral"> </span>
|
|
500
|
+
<span class="cline-any cline-neutral"> </span>
|
|
501
|
+
<span class="cline-any cline-yes">1x</span>
|
|
502
|
+
<span class="cline-any cline-yes">1x</span>
|
|
503
|
+
<span class="cline-any cline-neutral"> </span>
|
|
504
|
+
<span class="cline-any cline-neutral"> </span>
|
|
505
|
+
<span class="cline-any cline-neutral"> </span>
|
|
506
|
+
<span class="cline-any cline-neutral"> </span>
|
|
507
|
+
<span class="cline-any cline-yes">1x</span>
|
|
508
|
+
<span class="cline-any cline-neutral"> </span>
|
|
509
|
+
<span class="cline-any cline-neutral"> </span>
|
|
510
|
+
<span class="cline-any cline-neutral"> </span>
|
|
511
|
+
<span class="cline-any cline-yes">1x</span>
|
|
512
|
+
<span class="cline-any cline-neutral"> </span>
|
|
513
|
+
<span class="cline-any cline-no"> </span>
|
|
514
|
+
<span class="cline-any cline-neutral"> </span>
|
|
515
|
+
<span class="cline-any cline-no"> </span>
|
|
516
|
+
<span class="cline-any cline-neutral"> </span>
|
|
517
|
+
<span class="cline-any cline-no"> </span>
|
|
518
|
+
<span class="cline-any cline-neutral"> </span>
|
|
519
|
+
<span class="cline-any cline-no"> </span>
|
|
520
|
+
<span class="cline-any cline-neutral"> </span>
|
|
521
|
+
<span class="cline-any cline-no"> </span>
|
|
522
|
+
<span class="cline-any cline-neutral"> </span>
|
|
523
|
+
<span class="cline-any cline-neutral"> </span>
|
|
524
|
+
<span class="cline-any cline-neutral"> </span>
|
|
525
|
+
<span class="cline-any cline-neutral"> </span>
|
|
526
|
+
<span class="cline-any cline-neutral"> </span>
|
|
527
|
+
<span class="cline-any cline-neutral"> </span>
|
|
528
|
+
<span class="cline-any cline-neutral"> </span>
|
|
529
|
+
<span class="cline-any cline-neutral"> </span>
|
|
530
|
+
<span class="cline-any cline-neutral"> </span>
|
|
531
|
+
<span class="cline-any cline-neutral"> </span>
|
|
532
|
+
<span class="cline-any cline-neutral"> </span>
|
|
533
|
+
<span class="cline-any cline-neutral"> </span>
|
|
534
|
+
<span class="cline-any cline-neutral"> </span>
|
|
535
|
+
<span class="cline-any cline-neutral"> </span>
|
|
536
|
+
<span class="cline-any cline-yes">1x</span>
|
|
537
|
+
<span class="cline-any cline-no"> </span>
|
|
538
|
+
<span class="cline-any cline-no"> </span>
|
|
539
|
+
<span class="cline-any cline-no"> </span>
|
|
540
|
+
<span class="cline-any cline-neutral"> </span>
|
|
541
|
+
<span class="cline-any cline-neutral"> </span>
|
|
542
|
+
<span class="cline-any cline-no"> </span>
|
|
543
|
+
<span class="cline-any cline-no"> </span>
|
|
544
|
+
<span class="cline-any cline-neutral"> </span>
|
|
545
|
+
<span class="cline-any cline-neutral"> </span>
|
|
546
|
+
<span class="cline-any cline-neutral"> </span>
|
|
547
|
+
<span class="cline-any cline-neutral"> </span>
|
|
548
|
+
<span class="cline-any cline-neutral"> </span>
|
|
549
|
+
<span class="cline-any cline-neutral"> </span>
|
|
550
|
+
<span class="cline-any cline-neutral"> </span>
|
|
551
|
+
<span class="cline-any cline-neutral"> </span>
|
|
552
|
+
<span class="cline-any cline-yes">1x</span>
|
|
553
|
+
<span class="cline-any cline-no"> </span>
|
|
554
|
+
<span class="cline-any cline-neutral"> </span>
|
|
555
|
+
<span class="cline-any cline-neutral"> </span>
|
|
556
|
+
<span class="cline-any cline-no"> </span>
|
|
557
|
+
<span class="cline-any cline-no"> </span>
|
|
558
|
+
<span class="cline-any cline-neutral"> </span>
|
|
559
|
+
<span class="cline-any cline-neutral"> </span>
|
|
560
|
+
<span class="cline-any cline-neutral"> </span>
|
|
561
|
+
<span class="cline-any cline-no"> </span>
|
|
562
|
+
<span class="cline-any cline-no"> </span>
|
|
563
|
+
<span class="cline-any cline-neutral"> </span>
|
|
564
|
+
<span class="cline-any cline-neutral"> </span>
|
|
565
|
+
<span class="cline-any cline-neutral"> </span>
|
|
566
|
+
<span class="cline-any cline-no"> </span>
|
|
567
|
+
<span class="cline-any cline-no"> </span>
|
|
568
|
+
<span class="cline-any cline-neutral"> </span>
|
|
569
|
+
<span class="cline-any cline-neutral"> </span>
|
|
570
|
+
<span class="cline-any cline-neutral"> </span>
|
|
571
|
+
<span class="cline-any cline-neutral"> </span>
|
|
572
|
+
<span class="cline-any cline-yes">1x</span>
|
|
573
|
+
<span class="cline-any cline-neutral"> </span>
|
|
574
|
+
<span class="cline-any cline-neutral"> </span>
|
|
575
|
+
<span class="cline-any cline-neutral"> </span>
|
|
576
|
+
<span class="cline-any cline-neutral"> </span>
|
|
577
|
+
<span class="cline-any cline-neutral"> </span>
|
|
578
|
+
<span class="cline-any cline-neutral"> </span>
|
|
579
|
+
<span class="cline-any cline-neutral"> </span>
|
|
580
|
+
<span class="cline-any cline-neutral"> </span>
|
|
581
|
+
<span class="cline-any cline-neutral"> </span>
|
|
582
|
+
<span class="cline-any cline-neutral"> </span>
|
|
583
|
+
<span class="cline-any cline-neutral"> </span>
|
|
584
|
+
<span class="cline-any cline-yes">1x</span>
|
|
585
|
+
<span class="cline-any cline-neutral"> </span>
|
|
586
|
+
<span class="cline-any cline-yes">1x</span>
|
|
587
|
+
<span class="cline-any cline-neutral"> </span>
|
|
588
|
+
<span class="cline-any cline-yes">1x</span>
|
|
589
|
+
<span class="cline-any cline-yes">1x</span>
|
|
590
|
+
<span class="cline-any cline-neutral"> </span>
|
|
591
|
+
<span class="cline-any cline-neutral"> </span>
|
|
592
|
+
<span class="cline-any cline-yes">1x</span>
|
|
593
|
+
<span class="cline-any cline-yes">4x</span>
|
|
594
|
+
<span class="cline-any cline-yes">4x</span>
|
|
595
|
+
<span class="cline-any cline-yes">4x</span>
|
|
596
|
+
<span class="cline-any cline-neutral"> </span>
|
|
597
|
+
<span class="cline-any cline-yes">4x</span>
|
|
598
|
+
<span class="cline-any cline-yes">4x</span>
|
|
599
|
+
<span class="cline-any cline-yes">4x</span>
|
|
600
|
+
<span class="cline-any cline-neutral"> </span>
|
|
601
|
+
<span class="cline-any cline-neutral"> </span>
|
|
602
|
+
<span class="cline-any cline-yes">4x</span>
|
|
603
|
+
<span class="cline-any cline-yes">4x</span>
|
|
604
|
+
<span class="cline-any cline-yes">4x</span>
|
|
605
|
+
<span class="cline-any cline-yes">4x</span>
|
|
606
|
+
<span class="cline-any cline-neutral"> </span>
|
|
607
|
+
<span class="cline-any cline-yes">4x</span>
|
|
608
|
+
<span class="cline-any cline-yes">4x</span>
|
|
609
|
+
<span class="cline-any cline-yes">4x</span>
|
|
610
|
+
<span class="cline-any cline-neutral"> </span>
|
|
611
|
+
<span class="cline-any cline-neutral"> </span>
|
|
612
|
+
<span class="cline-any cline-neutral"> </span>
|
|
613
|
+
<span class="cline-any cline-neutral"> </span>
|
|
614
|
+
<span class="cline-any cline-neutral"> </span>
|
|
615
|
+
<span class="cline-any cline-neutral"> </span>
|
|
616
|
+
<span class="cline-any cline-neutral"> </span>
|
|
617
|
+
<span class="cline-any cline-yes">1x</span>
|
|
618
|
+
<span class="cline-any cline-neutral"> </span>
|
|
619
|
+
<span class="cline-any cline-neutral"> </span>
|
|
620
|
+
<span class="cline-any cline-neutral"> </span>
|
|
621
|
+
<span class="cline-any cline-neutral"> </span>
|
|
622
|
+
<span class="cline-any cline-neutral"> </span>
|
|
623
|
+
<span class="cline-any cline-neutral"> </span>
|
|
624
|
+
<span class="cline-any cline-neutral"> </span>
|
|
625
|
+
<span class="cline-any cline-neutral"> </span>
|
|
626
|
+
<span class="cline-any cline-neutral"> </span>
|
|
627
|
+
<span class="cline-any cline-neutral"> </span>
|
|
628
|
+
<span class="cline-any cline-neutral"> </span>
|
|
629
|
+
<span class="cline-any cline-neutral"> </span>
|
|
630
|
+
<span class="cline-any cline-no"> </span>
|
|
631
|
+
<span class="cline-any cline-neutral"> </span>
|
|
632
|
+
<span class="cline-any cline-neutral"> </span>
|
|
633
|
+
<span class="cline-any cline-no"> </span>
|
|
634
|
+
<span class="cline-any cline-no"> </span>
|
|
635
|
+
<span class="cline-any cline-neutral"> </span>
|
|
636
|
+
<span class="cline-any cline-neutral"> </span>
|
|
637
|
+
<span class="cline-any cline-no"> </span>
|
|
638
|
+
<span class="cline-any cline-neutral"> </span>
|
|
639
|
+
<span class="cline-any cline-neutral"> </span>
|
|
640
|
+
<span class="cline-any cline-neutral"> </span>
|
|
641
|
+
<span class="cline-any cline-neutral"> </span>
|
|
642
|
+
<span class="cline-any cline-neutral"> </span>
|
|
643
|
+
<span class="cline-any cline-neutral"> </span>
|
|
644
|
+
<span class="cline-any cline-neutral"> </span>
|
|
645
|
+
<span class="cline-any cline-no"> </span>
|
|
646
|
+
<span class="cline-any cline-no"> </span>
|
|
647
|
+
<span class="cline-any cline-no"> </span>
|
|
648
|
+
<span class="cline-any cline-no"> </span>
|
|
649
|
+
<span class="cline-any cline-neutral"> </span>
|
|
650
|
+
<span class="cline-any cline-neutral"> </span>
|
|
651
|
+
<span class="cline-any cline-no"> </span>
|
|
652
|
+
<span class="cline-any cline-no"> </span>
|
|
653
|
+
<span class="cline-any cline-neutral"> </span>
|
|
654
|
+
<span class="cline-any cline-no"> </span>
|
|
655
|
+
<span class="cline-any cline-no"> </span>
|
|
656
|
+
<span class="cline-any cline-no"> </span>
|
|
657
|
+
<span class="cline-any cline-neutral"> </span>
|
|
658
|
+
<span class="cline-any cline-neutral"> </span>
|
|
659
|
+
<span class="cline-any cline-neutral"> </span>
|
|
660
|
+
<span class="cline-any cline-neutral"> </span>
|
|
661
|
+
<span class="cline-any cline-neutral"> </span>
|
|
662
|
+
<span class="cline-any cline-neutral"> </span>
|
|
663
|
+
<span class="cline-any cline-yes">1x</span>
|
|
664
|
+
<span class="cline-any cline-neutral"> </span>
|
|
665
|
+
<span class="cline-any cline-neutral"> </span>
|
|
666
|
+
<span class="cline-any cline-neutral"> </span>
|
|
667
|
+
<span class="cline-any cline-neutral"> </span>
|
|
668
|
+
<span class="cline-any cline-neutral"> </span>
|
|
669
|
+
<span class="cline-any cline-neutral"> </span>
|
|
670
|
+
<span class="cline-any cline-neutral"> </span>
|
|
671
|
+
<span class="cline-any cline-neutral"> </span>
|
|
672
|
+
<span class="cline-any cline-neutral"> </span>
|
|
673
|
+
<span class="cline-any cline-neutral"> </span>
|
|
674
|
+
<span class="cline-any cline-neutral"> </span>
|
|
675
|
+
<span class="cline-any cline-neutral"> </span>
|
|
676
|
+
<span class="cline-any cline-neutral"> </span>
|
|
677
|
+
<span class="cline-any cline-neutral"> </span>
|
|
678
|
+
<span class="cline-any cline-no"> </span>
|
|
679
|
+
<span class="cline-any cline-neutral"> </span>
|
|
680
|
+
<span class="cline-any cline-neutral"> </span>
|
|
681
|
+
<span class="cline-any cline-no"> </span>
|
|
682
|
+
<span class="cline-any cline-no"> </span>
|
|
683
|
+
<span class="cline-any cline-neutral"> </span>
|
|
684
|
+
<span class="cline-any cline-neutral"> </span>
|
|
685
|
+
<span class="cline-any cline-no"> </span>
|
|
686
|
+
<span class="cline-any cline-neutral"> </span>
|
|
687
|
+
<span class="cline-any cline-neutral"> </span>
|
|
688
|
+
<span class="cline-any cline-neutral"> </span>
|
|
689
|
+
<span class="cline-any cline-neutral"> </span>
|
|
690
|
+
<span class="cline-any cline-neutral"> </span>
|
|
691
|
+
<span class="cline-any cline-neutral"> </span>
|
|
692
|
+
<span class="cline-any cline-neutral"> </span>
|
|
693
|
+
<span class="cline-any cline-neutral"> </span>
|
|
694
|
+
<span class="cline-any cline-no"> </span>
|
|
695
|
+
<span class="cline-any cline-no"> </span>
|
|
696
|
+
<span class="cline-any cline-no"> </span>
|
|
697
|
+
<span class="cline-any cline-no"> </span>
|
|
698
|
+
<span class="cline-any cline-no"> </span>
|
|
699
|
+
<span class="cline-any cline-neutral"> </span>
|
|
700
|
+
<span class="cline-any cline-no"> </span>
|
|
701
|
+
<span class="cline-any cline-neutral"> </span>
|
|
702
|
+
<span class="cline-any cline-no"> </span>
|
|
703
|
+
<span class="cline-any cline-no"> </span>
|
|
704
|
+
<span class="cline-any cline-neutral"> </span>
|
|
705
|
+
<span class="cline-any cline-neutral"> </span>
|
|
706
|
+
<span class="cline-any cline-no"> </span>
|
|
707
|
+
<span class="cline-any cline-no"> </span>
|
|
708
|
+
<span class="cline-any cline-no"> </span>
|
|
709
|
+
<span class="cline-any cline-no"> </span>
|
|
710
|
+
<span class="cline-any cline-no"> </span>
|
|
711
|
+
<span class="cline-any cline-neutral"> </span>
|
|
712
|
+
<span class="cline-any cline-no"> </span>
|
|
713
|
+
<span class="cline-any cline-neutral"> </span>
|
|
714
|
+
<span class="cline-any cline-no"> </span>
|
|
715
|
+
<span class="cline-any cline-no"> </span>
|
|
716
|
+
<span class="cline-any cline-neutral"> </span>
|
|
717
|
+
<span class="cline-any cline-neutral"> </span>
|
|
718
|
+
<span class="cline-any cline-neutral"> </span>
|
|
719
|
+
<span class="cline-any cline-neutral"> </span>
|
|
720
|
+
<span class="cline-any cline-neutral"> </span>
|
|
721
|
+
<span class="cline-any cline-neutral"> </span>
|
|
722
|
+
<span class="cline-any cline-neutral"> </span>
|
|
723
|
+
<span class="cline-any cline-neutral"> </span>
|
|
724
|
+
<span class="cline-any cline-yes">4x</span>
|
|
725
|
+
<span class="cline-any cline-neutral"> </span>
|
|
726
|
+
<span class="cline-any cline-neutral"> </span>
|
|
727
|
+
<span class="cline-any cline-neutral"> </span>
|
|
728
|
+
<span class="cline-any cline-neutral"> </span>
|
|
729
|
+
<span class="cline-any cline-neutral"> </span>
|
|
730
|
+
<span class="cline-any cline-neutral"> </span>
|
|
731
|
+
<span class="cline-any cline-neutral"> </span>
|
|
732
|
+
<span class="cline-any cline-neutral"> </span>
|
|
733
|
+
<span class="cline-any cline-yes">1x</span>
|
|
734
|
+
<span class="cline-any cline-neutral"> </span>
|
|
735
|
+
<span class="cline-any cline-neutral"> </span>
|
|
736
|
+
<span class="cline-any cline-neutral"> </span>
|
|
737
|
+
<span class="cline-any cline-neutral"> </span>
|
|
738
|
+
<span class="cline-any cline-neutral"> </span>
|
|
739
|
+
<span class="cline-any cline-neutral"> </span>
|
|
740
|
+
<span class="cline-any cline-neutral"> </span>
|
|
741
|
+
<span class="cline-any cline-yes">1x</span>
|
|
742
|
+
<span class="cline-any cline-neutral"> </span>
|
|
743
|
+
<span class="cline-any cline-neutral"> </span>
|
|
744
|
+
<span class="cline-any cline-neutral"> </span>
|
|
745
|
+
<span class="cline-any cline-neutral"> </span>
|
|
746
|
+
<span class="cline-any cline-neutral"> </span>
|
|
747
|
+
<span class="cline-any cline-neutral"> </span>
|
|
748
|
+
<span class="cline-any cline-neutral"> </span>
|
|
749
|
+
<span class="cline-any cline-neutral"> </span>
|
|
750
|
+
<span class="cline-any cline-yes">1x</span>
|
|
751
|
+
<span class="cline-any cline-neutral"> </span>
|
|
752
|
+
<span class="cline-any cline-neutral"> </span>
|
|
753
|
+
<span class="cline-any cline-neutral"> </span>
|
|
754
|
+
<span class="cline-any cline-neutral"> </span>
|
|
755
|
+
<span class="cline-any cline-neutral"> </span>
|
|
756
|
+
<span class="cline-any cline-neutral"> </span>
|
|
757
|
+
<span class="cline-any cline-neutral"> </span>
|
|
758
|
+
<span class="cline-any cline-neutral"> </span>
|
|
759
|
+
<span class="cline-any cline-yes">1x</span>
|
|
760
|
+
<span class="cline-any cline-neutral"> </span>
|
|
761
|
+
<span class="cline-any cline-neutral"> </span>
|
|
762
|
+
<span class="cline-any cline-neutral"> </span>
|
|
763
|
+
<span class="cline-any cline-neutral"> </span>
|
|
764
|
+
<span class="cline-any cline-neutral"> </span>
|
|
765
|
+
<span class="cline-any cline-neutral"> </span>
|
|
766
|
+
<span class="cline-any cline-neutral"> </span>
|
|
767
|
+
<span class="cline-any cline-yes">1x</span>
|
|
768
|
+
<span class="cline-any cline-no"> </span>
|
|
769
|
+
<span class="cline-any cline-neutral"> </span>
|
|
770
|
+
<span class="cline-any cline-neutral"> </span>
|
|
771
|
+
<span class="cline-any cline-neutral"> </span>
|
|
772
|
+
<span class="cline-any cline-neutral"> </span>
|
|
773
|
+
<span class="cline-any cline-neutral"> </span>
|
|
774
|
+
<span class="cline-any cline-neutral"> </span>
|
|
775
|
+
<span class="cline-any cline-neutral"> </span>
|
|
776
|
+
<span class="cline-any cline-neutral"> </span>
|
|
777
|
+
<span class="cline-any cline-neutral"> </span>
|
|
778
|
+
<span class="cline-any cline-neutral"> </span>
|
|
779
|
+
<span class="cline-any cline-neutral"> </span>
|
|
780
|
+
<span class="cline-any cline-neutral"> </span>
|
|
781
|
+
<span class="cline-any cline-neutral"> </span>
|
|
782
|
+
<span class="cline-any cline-neutral"> </span>
|
|
783
|
+
<span class="cline-any cline-no"> </span>
|
|
784
|
+
<span class="cline-any cline-no"> </span>
|
|
785
|
+
<span class="cline-any cline-neutral"> </span>
|
|
786
|
+
<span class="cline-any cline-neutral"> </span>
|
|
787
|
+
<span class="cline-any cline-neutral"> </span>
|
|
788
|
+
<span class="cline-any cline-neutral"> </span>
|
|
789
|
+
<span class="cline-any cline-yes">1x</span>
|
|
790
|
+
<span class="cline-any cline-no"> </span>
|
|
791
|
+
<span class="cline-any cline-neutral"> </span>
|
|
792
|
+
<span class="cline-any cline-neutral"> </span>
|
|
793
|
+
<span class="cline-any cline-neutral"> </span>
|
|
794
|
+
<span class="cline-any cline-yes">1x</span>
|
|
795
|
+
<span class="cline-any cline-neutral"> </span>
|
|
796
|
+
<span class="cline-any cline-neutral"> </span>
|
|
797
|
+
<span class="cline-any cline-neutral"> </span>
|
|
798
|
+
<span class="cline-any cline-neutral"> </span>
|
|
799
|
+
<span class="cline-any cline-neutral"> </span>
|
|
800
|
+
<span class="cline-any cline-neutral"> </span>
|
|
801
|
+
<span class="cline-any cline-neutral"> </span>
|
|
802
|
+
<span class="cline-any cline-neutral"> </span>
|
|
803
|
+
<span class="cline-any cline-neutral"> </span>
|
|
804
|
+
<span class="cline-any cline-neutral"> </span>
|
|
805
|
+
<span class="cline-any cline-no"> </span>
|
|
806
|
+
<span class="cline-any cline-neutral"> </span>
|
|
807
|
+
<span class="cline-any cline-neutral"> </span>
|
|
808
|
+
<span class="cline-any cline-no"> </span>
|
|
809
|
+
<span class="cline-any cline-no"> </span>
|
|
810
|
+
<span class="cline-any cline-neutral"> </span>
|
|
811
|
+
<span class="cline-any cline-neutral"> </span>
|
|
812
|
+
<span class="cline-any cline-no"> </span>
|
|
813
|
+
<span class="cline-any cline-no"> </span>
|
|
814
|
+
<span class="cline-any cline-no"> </span>
|
|
815
|
+
<span class="cline-any cline-no"> </span>
|
|
816
|
+
<span class="cline-any cline-neutral"> </span>
|
|
817
|
+
<span class="cline-any cline-neutral"> </span>
|
|
818
|
+
<span class="cline-any cline-no"> </span>
|
|
819
|
+
<span class="cline-any cline-no"> </span>
|
|
820
|
+
<span class="cline-any cline-neutral"> </span>
|
|
821
|
+
<span class="cline-any cline-neutral"> </span>
|
|
822
|
+
<span class="cline-any cline-neutral"> </span>
|
|
823
|
+
<span class="cline-any cline-neutral"> </span>
|
|
824
|
+
<span class="cline-any cline-no"> </span>
|
|
825
|
+
<span class="cline-any cline-no"> </span>
|
|
826
|
+
<span class="cline-any cline-neutral"> </span>
|
|
827
|
+
<span class="cline-any cline-neutral"> </span>
|
|
828
|
+
<span class="cline-any cline-neutral"> </span>
|
|
829
|
+
<span class="cline-any cline-neutral"> </span>
|
|
830
|
+
<span class="cline-any cline-neutral"> </span>
|
|
831
|
+
<span class="cline-any cline-yes">1x</span>
|
|
832
|
+
<span class="cline-any cline-neutral"> </span>
|
|
833
|
+
<span class="cline-any cline-neutral"> </span>
|
|
834
|
+
<span class="cline-any cline-neutral"> </span>
|
|
835
|
+
<span class="cline-any cline-neutral"> </span>
|
|
836
|
+
<span class="cline-any cline-no"> </span>
|
|
837
|
+
<span class="cline-any cline-neutral"> </span>
|
|
838
|
+
<span class="cline-any cline-neutral"> </span>
|
|
839
|
+
<span class="cline-any cline-no"> </span>
|
|
840
|
+
<span class="cline-any cline-no"> </span>
|
|
841
|
+
<span class="cline-any cline-neutral"> </span>
|
|
842
|
+
<span class="cline-any cline-neutral"> </span>
|
|
843
|
+
<span class="cline-any cline-no"> </span>
|
|
844
|
+
<span class="cline-any cline-no"> </span>
|
|
845
|
+
<span class="cline-any cline-no"> </span>
|
|
846
|
+
<span class="cline-any cline-no"> </span>
|
|
847
|
+
<span class="cline-any cline-neutral"> </span>
|
|
848
|
+
<span class="cline-any cline-neutral"> </span>
|
|
849
|
+
<span class="cline-any cline-neutral"> </span>
|
|
850
|
+
<span class="cline-any cline-neutral"> </span>
|
|
851
|
+
<span class="cline-any cline-neutral"> </span>
|
|
852
|
+
<span class="cline-any cline-yes">1x</span>
|
|
853
|
+
<span class="cline-any cline-neutral"> </span>
|
|
854
|
+
<span class="cline-any cline-neutral"> </span>
|
|
855
|
+
<span class="cline-any cline-neutral"> </span>
|
|
856
|
+
<span class="cline-any cline-neutral"> </span>
|
|
857
|
+
<span class="cline-any cline-neutral"> </span>
|
|
858
|
+
<span class="cline-any cline-neutral"> </span>
|
|
859
|
+
<span class="cline-any cline-neutral"> </span>
|
|
860
|
+
<span class="cline-any cline-neutral"> </span>
|
|
861
|
+
<span class="cline-any cline-no"> </span>
|
|
862
|
+
<span class="cline-any cline-neutral"> </span>
|
|
863
|
+
<span class="cline-any cline-neutral"> </span>
|
|
864
|
+
<span class="cline-any cline-no"> </span>
|
|
865
|
+
<span class="cline-any cline-no"> </span>
|
|
866
|
+
<span class="cline-any cline-neutral"> </span>
|
|
867
|
+
<span class="cline-any cline-neutral"> </span>
|
|
868
|
+
<span class="cline-any cline-no"> </span>
|
|
869
|
+
<span class="cline-any cline-no"> </span>
|
|
870
|
+
<span class="cline-any cline-neutral"> </span>
|
|
871
|
+
<span class="cline-any cline-no"> </span>
|
|
872
|
+
<span class="cline-any cline-no"> </span>
|
|
873
|
+
<span class="cline-any cline-no"> </span>
|
|
874
|
+
<span class="cline-any cline-no"> </span>
|
|
875
|
+
<span class="cline-any cline-neutral"> </span>
|
|
876
|
+
<span class="cline-any cline-no"> </span>
|
|
877
|
+
<span class="cline-any cline-neutral"> </span>
|
|
878
|
+
<span class="cline-any cline-no"> </span>
|
|
879
|
+
<span class="cline-any cline-neutral"> </span>
|
|
880
|
+
<span class="cline-any cline-neutral"> </span>
|
|
881
|
+
<span class="cline-any cline-neutral"> </span>
|
|
882
|
+
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">/**
|
|
883
|
+
* Copyright (c) 2025-Present, Nitrogen Labs, Inc.
|
|
884
|
+
* Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
|
|
885
|
+
*/
|
|
886
|
+
import {jest} from '@jest/globals';
|
|
887
|
+
import type {GraphQLResolveInfo} from 'graphql';
|
|
888
|
+
|
|
889
|
+
|
|
890
|
+
import type {ApiContext} from '../types/auth.types.js';
|
|
891
|
+
|
|
892
|
+
// Define proper types for test utilities
|
|
893
|
+
type MockOverrides = Partial<Record<string, unknown>>;
|
|
894
|
+
type TestContext = Partial<ApiContext> & {session?: Partial<{userId: string; username: string; userAccess: number}>};
|
|
895
|
+
type TestArgs = Record<string, unknown>;
|
|
896
|
+
type TestReturnValue = unknown;
|
|
897
|
+
|
|
898
|
+
export const createMockContext = (overrides: MockOverrides = {}): ApiContext => {
|
|
899
|
+
const defaultSession = {
|
|
900
|
+
userAccess: 1,
|
|
901
|
+
userId: 'user1',
|
|
902
|
+
username: 'testuser'
|
|
903
|
+
};
|
|
904
|
+
const overrideSession: Partial<typeof defaultSession> = overrides.session || {};
|
|
905
|
+
const context: TestContext = {
|
|
906
|
+
databaseName: (overrides.databaseName as string) ?? 'test',
|
|
907
|
+
...overrides
|
|
908
|
+
};
|
|
909
|
+
delete context.session;
|
|
910
|
+
context.session = {
|
|
911
|
+
userAccess: overrideSession.userAccess !== undefined ? <span class="branch-0 cbranch-no" title="branch not covered" >overrideSession.userAccess </span>: defaultSession.userAccess,
|
|
912
|
+
userId: overrideSession.userId !== undefined ? <span class="branch-0 cbranch-no" title="branch not covered" >overrideSession.userId </span>: defaultSession.userId,
|
|
913
|
+
username: overrideSession.username !== undefined ? <span class="branch-0 cbranch-no" title="branch not covered" >overrideSession.username </span>: defaultSession.username
|
|
914
|
+
};
|
|
915
|
+
return context as ApiContext;
|
|
916
|
+
};
|
|
917
|
+
|
|
918
|
+
// Common mock resolve info for GraphQL resolvers
|
|
919
|
+
export const createMockResolveInfo = <span class="fstat-no" title="function not covered" >(f</span>ieldName: string = <span class="branch-0 cbranch-no" title="branch not covered" >'test')</span>: GraphQLResolveInfo => {
|
|
920
|
+
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
921
|
+
const operation = <span class="cstat-no" title="statement not covered" >{} as GraphQLResolveInfo['operation'];</span>
|
|
922
|
+
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
923
|
+
const parentType = <span class="cstat-no" title="statement not covered" >{} as GraphQLResolveInfo['parentType'];</span>
|
|
924
|
+
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
925
|
+
const returnType = <span class="cstat-no" title="statement not covered" >{} as GraphQLResolveInfo['returnType'];</span>
|
|
926
|
+
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
927
|
+
const schema = <span class="cstat-no" title="statement not covered" >{} as GraphQLResolveInfo['schema'];</span>
|
|
928
|
+
|
|
929
|
+
<span class="cstat-no" title="statement not covered" > return {</span>
|
|
930
|
+
fieldName,
|
|
931
|
+
fieldNodes: [],
|
|
932
|
+
fragments: {},
|
|
933
|
+
operation,
|
|
934
|
+
parentType,
|
|
935
|
+
path: {key: fieldName, prev: undefined, typename: 'Test'},
|
|
936
|
+
returnType,
|
|
937
|
+
rootValue: {},
|
|
938
|
+
schema,
|
|
939
|
+
variableValues: {}
|
|
940
|
+
};
|
|
941
|
+
};
|
|
942
|
+
|
|
943
|
+
// Utility to mock actions module
|
|
944
|
+
export const mockActionsModule = <span class="fstat-no" title="function not covered" >as</span>ync (modulePath: string, mockActions: Record<string, jest.Mock>) => {
|
|
945
|
+
const mocks = <span class="cstat-no" title="statement not covered" >Object.entries(mockActions).reduce(<span class="fstat-no" title="function not covered" >(a</span>cc, [key, value]) => {</span>
|
|
946
|
+
<span class="cstat-no" title="statement not covered" > acc[key] = jest.fn().mockImplementation(value);</span>
|
|
947
|
+
<span class="cstat-no" title="statement not covered" > return acc;</span>
|
|
948
|
+
}, {} as Record<string, jest.Mock>);
|
|
949
|
+
|
|
950
|
+
<span class="cstat-no" title="statement not covered" > await jest.isolateModulesAsync(<span class="fstat-no" title="function not covered" >as</span>ync () => {</span>
|
|
951
|
+
<span class="cstat-no" title="statement not covered" > jest.unstable_mockModule(modulePath, <span class="fstat-no" title="function not covered" >()</span> => (<span class="cstat-no" title="statement not covered" >{</span></span>
|
|
952
|
+
__esModule: true,
|
|
953
|
+
...mocks,
|
|
954
|
+
default: mocks
|
|
955
|
+
}));
|
|
956
|
+
});
|
|
957
|
+
};
|
|
958
|
+
|
|
959
|
+
// Utility to mock object types
|
|
960
|
+
export const mockObjectType = <span class="fstat-no" title="function not covered" >as</span>ync (modulePath: string, typeName: string) => {
|
|
961
|
+
const mock = <span class="cstat-no" title="statement not covered" >{</span>
|
|
962
|
+
__esModule: true,
|
|
963
|
+
[typeName]: {
|
|
964
|
+
getField: jest.fn(<span class="fstat-no" title="function not covered" >()</span> => (<span class="cstat-no" title="statement not covered" >{resolve: jest.fn()})</span>),
|
|
965
|
+
getFields: jest.fn(<span class="fstat-no" title="function not covered" >()</span> => (<span class="cstat-no" title="statement not covered" >{})</span>)
|
|
966
|
+
},
|
|
967
|
+
default: {
|
|
968
|
+
[typeName]: {
|
|
969
|
+
getField: jest.fn(<span class="fstat-no" title="function not covered" >()</span> => (<span class="cstat-no" title="statement not covered" >{resolve: jest.fn()})</span>),
|
|
970
|
+
getFields: jest.fn(<span class="fstat-no" title="function not covered" >()</span> => (<span class="cstat-no" title="statement not covered" >{})</span>)
|
|
971
|
+
}
|
|
972
|
+
}
|
|
973
|
+
};
|
|
974
|
+
<span class="cstat-no" title="statement not covered" > await jest.isolateModulesAsync(<span class="fstat-no" title="function not covered" >as</span>ync () => {</span>
|
|
975
|
+
<span class="cstat-no" title="statement not covered" > jest.unstable_mockModule(modulePath, <span class="fstat-no" title="function not covered" >()</span> => <span class="cstat-no" title="statement not covered" >mock)</span>;</span>
|
|
976
|
+
});
|
|
977
|
+
};
|
|
978
|
+
|
|
979
|
+
// Utility to create a test suite for query resolvers
|
|
980
|
+
export const createQueryTestSuite = (
|
|
981
|
+
name: string,
|
|
982
|
+
actionsPath: string,
|
|
983
|
+
testCases: Array<{
|
|
984
|
+
name: string;
|
|
985
|
+
actionName: string;
|
|
986
|
+
args: TestArgs;
|
|
987
|
+
expectedCall: (context: TestContext, args: TestArgs) => TestArgs;
|
|
988
|
+
mockReturnValue: TestReturnValue;
|
|
989
|
+
errorCase?: boolean;
|
|
990
|
+
}>
|
|
991
|
+
) => {
|
|
992
|
+
describe(`${name} Queries`, () => {
|
|
993
|
+
let actions: any;
|
|
994
|
+
const mockContext = createMockContext();
|
|
995
|
+
|
|
996
|
+
beforeAll(() => {
|
|
997
|
+
actions = {};
|
|
998
|
+
});
|
|
999
|
+
|
|
1000
|
+
testCases.forEach(({name: testName, actionName, args, expectedCall, mockReturnValue, errorCase = <span class="branch-0 cbranch-no" title="branch not covered" >false}</span>) => {
|
|
1001
|
+
it(`should call ${actionName} action with correct parameters`, async () => {
|
|
1002
|
+
const mockFn = jest.fn().mockImplementation(() => Promise.resolve(mockReturnValue));
|
|
1003
|
+
actions[actionName] = mockFn;
|
|
1004
|
+
|
|
1005
|
+
const result = await mockFn(mockContext, args);
|
|
1006
|
+
expect(mockFn).toHaveBeenCalledWith(mockContext, expectedCall(mockContext, args));
|
|
1007
|
+
expect(result).toEqual(mockReturnValue);
|
|
1008
|
+
});
|
|
1009
|
+
|
|
1010
|
+
<span class="missing-if-branch" title="else path not taken" >E</span>if(errorCase) {
|
|
1011
|
+
it(`should handle ${actionName} when no data found`, async () => {
|
|
1012
|
+
const mockFn = jest.fn().mockImplementation(() => Promise.resolve(null));
|
|
1013
|
+
actions[actionName] = mockFn;
|
|
1014
|
+
|
|
1015
|
+
const result = await mockFn(mockContext, args);
|
|
1016
|
+
expect(mockFn).toHaveBeenCalledWith(mockContext, expectedCall(mockContext, args));
|
|
1017
|
+
expect(result).toBeNull();
|
|
1018
|
+
});
|
|
1019
|
+
}
|
|
1020
|
+
});
|
|
1021
|
+
});
|
|
1022
|
+
};
|
|
1023
|
+
|
|
1024
|
+
// Utility to create a test suite for mutation resolvers
|
|
1025
|
+
export const createMutationTestSuite = <span class="fstat-no" title="function not covered" >(</span>
|
|
1026
|
+
name: string,
|
|
1027
|
+
actionsPath: string,
|
|
1028
|
+
testCases: Array<{
|
|
1029
|
+
name: string;
|
|
1030
|
+
actionName: string;
|
|
1031
|
+
args: TestArgs;
|
|
1032
|
+
expectedCall: (context: TestContext, args: TestArgs) => TestArgs;
|
|
1033
|
+
mockReturnValue: TestReturnValue;
|
|
1034
|
+
requiresAuth?: boolean;
|
|
1035
|
+
authUserId?: string;
|
|
1036
|
+
}>
|
|
1037
|
+
) => {
|
|
1038
|
+
<span class="cstat-no" title="statement not covered" > describe(`${name} Mutations`, <span class="fstat-no" title="function not covered" >()</span> => {</span>
|
|
1039
|
+
let actions: any;
|
|
1040
|
+
|
|
1041
|
+
<span class="cstat-no" title="statement not covered" > beforeAll(<span class="fstat-no" title="function not covered" >()</span> => {</span>
|
|
1042
|
+
<span class="cstat-no" title="statement not covered" > actions = {};</span>
|
|
1043
|
+
});
|
|
1044
|
+
|
|
1045
|
+
<span class="cstat-no" title="statement not covered" > testCases.forEach(<span class="fstat-no" title="function not covered" >({</span></span>
|
|
1046
|
+
actionName,
|
|
1047
|
+
args,
|
|
1048
|
+
expectedCall,
|
|
1049
|
+
mockReturnValue,
|
|
1050
|
+
requiresAuth = <span class="branch-0 cbranch-no" title="branch not covered" >false,</span>
|
|
1051
|
+
authUserId
|
|
1052
|
+
}) => {
|
|
1053
|
+
<span class="cstat-no" title="statement not covered" > it(`should call ${actionName} action with correct parameters`, <span class="fstat-no" title="function not covered" >as</span>ync () => {</span>
|
|
1054
|
+
const mockContext = <span class="cstat-no" title="statement not covered" >createMockContext();</span>
|
|
1055
|
+
<span class="cstat-no" title="statement not covered" > if(requiresAuth && authUserId) {</span>
|
|
1056
|
+
<span class="cstat-no" title="statement not covered" > (mockContext.session as {userId: string}).userId = authUserId;</span>
|
|
1057
|
+
}
|
|
1058
|
+
|
|
1059
|
+
const mockFn = <span class="cstat-no" title="statement not covered" >jest.fn().mockImplementation(<span class="fstat-no" title="function not covered" >()</span> => <span class="cstat-no" title="statement not covered" >Promise.resolve(mockReturnValue))</span>;</span>
|
|
1060
|
+
<span class="cstat-no" title="statement not covered" > actions[actionName] = mockFn;</span>
|
|
1061
|
+
|
|
1062
|
+
const result = <span class="cstat-no" title="statement not covered" >await mockFn(mockContext, args);</span>
|
|
1063
|
+
<span class="cstat-no" title="statement not covered" > expect(mockFn).toHaveBeenCalledWith(mockContext, expectedCall(mockContext, args));</span>
|
|
1064
|
+
<span class="cstat-no" title="statement not covered" > expect(result).toEqual(mockReturnValue);</span>
|
|
1065
|
+
});
|
|
1066
|
+
});
|
|
1067
|
+
});
|
|
1068
|
+
};
|
|
1069
|
+
|
|
1070
|
+
// Utility to create integration test suite
|
|
1071
|
+
export const createIntegrationTestSuite = <span class="fstat-no" title="function not covered" >(</span>
|
|
1072
|
+
name: string,
|
|
1073
|
+
actionsPath: string,
|
|
1074
|
+
objectTypePath: string,
|
|
1075
|
+
typeName: string,
|
|
1076
|
+
testCases: Array<{
|
|
1077
|
+
name: string;
|
|
1078
|
+
actionName: string;
|
|
1079
|
+
args: TestArgs;
|
|
1080
|
+
expectedCall: (context: TestContext, args: TestArgs) => TestArgs;
|
|
1081
|
+
successReturnValue: TestReturnValue;
|
|
1082
|
+
errorReturnValue: TestReturnValue;
|
|
1083
|
+
testErrorCase: boolean;
|
|
1084
|
+
}>
|
|
1085
|
+
) => {
|
|
1086
|
+
<span class="cstat-no" title="statement not covered" > describe(`${name} Integration`, <span class="fstat-no" title="function not covered" >()</span> => {</span>
|
|
1087
|
+
let actions: any;
|
|
1088
|
+
|
|
1089
|
+
<span class="cstat-no" title="statement not covered" > beforeAll(<span class="fstat-no" title="function not covered" >()</span> => {</span>
|
|
1090
|
+
<span class="cstat-no" title="statement not covered" > actions = {};</span>
|
|
1091
|
+
});
|
|
1092
|
+
|
|
1093
|
+
<span class="cstat-no" title="statement not covered" > testCases.forEach(<span class="fstat-no" title="function not covered" >({</span></span>
|
|
1094
|
+
name: testName,
|
|
1095
|
+
actionName,
|
|
1096
|
+
args,
|
|
1097
|
+
expectedCall,
|
|
1098
|
+
successReturnValue,
|
|
1099
|
+
errorReturnValue,
|
|
1100
|
+
testErrorCase
|
|
1101
|
+
}) => {
|
|
1102
|
+
<span class="cstat-no" title="statement not covered" > describe(testName, <span class="fstat-no" title="function not covered" >()</span> => {</span>
|
|
1103
|
+
<span class="cstat-no" title="statement not covered" > it(`should return data when ${actionName} succeeds`, <span class="fstat-no" title="function not covered" >as</span>ync () => {</span>
|
|
1104
|
+
const mockContext = <span class="cstat-no" title="statement not covered" >createMockContext();</span>
|
|
1105
|
+
const mockFn = <span class="cstat-no" title="statement not covered" >jest.fn().mockImplementation(<span class="fstat-no" title="function not covered" >()</span> => <span class="cstat-no" title="statement not covered" >Promise.resolve(successReturnValue))</span>;</span>
|
|
1106
|
+
<span class="cstat-no" title="statement not covered" > actions[actionName] = mockFn;</span>
|
|
1107
|
+
|
|
1108
|
+
const result = <span class="cstat-no" title="statement not covered" >await mockFn(mockContext, args);</span>
|
|
1109
|
+
|
|
1110
|
+
<span class="cstat-no" title="statement not covered" > expect(mockFn).toHaveBeenCalledWith(mockContext, expectedCall(mockContext, args));</span>
|
|
1111
|
+
<span class="cstat-no" title="statement not covered" > expect(result).toEqual(successReturnValue || {});</span>
|
|
1112
|
+
});
|
|
1113
|
+
|
|
1114
|
+
<span class="cstat-no" title="statement not covered" > if(testErrorCase) {</span>
|
|
1115
|
+
<span class="cstat-no" title="statement not covered" > it(`should handle ${actionName} when no data found`, <span class="fstat-no" title="function not covered" >as</span>ync () => {</span>
|
|
1116
|
+
const mockContext = <span class="cstat-no" title="statement not covered" >createMockContext();</span>
|
|
1117
|
+
const mockFn = <span class="cstat-no" title="statement not covered" >jest.fn().mockImplementation(<span class="fstat-no" title="function not covered" >()</span> => <span class="cstat-no" title="statement not covered" >Promise.resolve(errorReturnValue))</span>;</span>
|
|
1118
|
+
<span class="cstat-no" title="statement not covered" > actions[actionName] = mockFn;</span>
|
|
1119
|
+
|
|
1120
|
+
const result = <span class="cstat-no" title="statement not covered" >await mockFn(mockContext, args);</span>
|
|
1121
|
+
|
|
1122
|
+
<span class="cstat-no" title="statement not covered" > expect(mockFn).toHaveBeenCalledWith(mockContext, expectedCall(mockContext, args));</span>
|
|
1123
|
+
<span class="cstat-no" title="statement not covered" > expect(result).toEqual(errorReturnValue);</span>
|
|
1124
|
+
});
|
|
1125
|
+
}
|
|
1126
|
+
});
|
|
1127
|
+
});
|
|
1128
|
+
});
|
|
1129
|
+
};
|
|
1130
|
+
|
|
1131
|
+
// Common mock data generators
|
|
1132
|
+
export const createMockUser = (overrides: MockOverrides = {}) => ({
|
|
1133
|
+
email: 'test@example.com',
|
|
1134
|
+
firstName: 'Test',
|
|
1135
|
+
lastName: 'User',
|
|
1136
|
+
userId: 'user1',
|
|
1137
|
+
username: 'testuser',
|
|
1138
|
+
...overrides
|
|
1139
|
+
});
|
|
1140
|
+
|
|
1141
|
+
export const createMockPost = <span class="fstat-no" title="function not covered" >(o</span>verrides: MockOverrides = <span class="branch-0 cbranch-no" title="branch not covered" >{})</span> => (<span class="cstat-no" title="statement not covered" >{</span>
|
|
1142
|
+
content: 'Test post content',
|
|
1143
|
+
createdAt: new Date().toISOString(),
|
|
1144
|
+
postId: 'post1',
|
|
1145
|
+
userId: 'user1',
|
|
1146
|
+
...overrides
|
|
1147
|
+
});
|
|
1148
|
+
|
|
1149
|
+
export const createMockMessage = <span class="fstat-no" title="function not covered" >(o</span>verrides: MockOverrides = <span class="branch-0 cbranch-no" title="branch not covered" >{})</span> => (<span class="cstat-no" title="statement not covered" >{</span>
|
|
1150
|
+
content: 'Test message',
|
|
1151
|
+
conversationId: 'conv1',
|
|
1152
|
+
createdAt: new Date().toISOString(),
|
|
1153
|
+
messageId: 'msg1',
|
|
1154
|
+
userId: 'user1',
|
|
1155
|
+
...overrides
|
|
1156
|
+
});
|
|
1157
|
+
|
|
1158
|
+
export const createMockReaction = <span class="fstat-no" title="function not covered" >(o</span>verrides: MockOverrides = <span class="branch-0 cbranch-no" title="branch not covered" >{})</span> => (<span class="cstat-no" title="statement not covered" >{</span>
|
|
1159
|
+
createdAt: new Date().toISOString(),
|
|
1160
|
+
postId: 'post1',
|
|
1161
|
+
reactionId: 'react1',
|
|
1162
|
+
type: 'like',
|
|
1163
|
+
userId: 'user1',
|
|
1164
|
+
...overrides
|
|
1165
|
+
});
|
|
1166
|
+
|
|
1167
|
+
export const createMockTag = <span class="fstat-no" title="function not covered" >(o</span>verrides: MockOverrides = <span class="branch-0 cbranch-no" title="branch not covered" >{})</span> => (<span class="cstat-no" title="statement not covered" >{</span>
|
|
1168
|
+
description: 'Test tag description',
|
|
1169
|
+
name: 'test-tag',
|
|
1170
|
+
tagId: 'tag1',
|
|
1171
|
+
...overrides
|
|
1172
|
+
});
|
|
1173
|
+
|
|
1174
|
+
// Utility to set up common mocks
|
|
1175
|
+
export const setupCommonMocks = <span class="fstat-no" title="function not covered" >as</span>ync () => {
|
|
1176
|
+
const mock = <span class="cstat-no" title="statement not covered" >{</span>
|
|
1177
|
+
__esModule: true,
|
|
1178
|
+
useDb: jest.fn(),
|
|
1179
|
+
getLimit: jest.fn(),
|
|
1180
|
+
getDocId: jest.fn(),
|
|
1181
|
+
sortIds: jest.fn(),
|
|
1182
|
+
getGqlFields: jest.fn(),
|
|
1183
|
+
default: {
|
|
1184
|
+
useDb: jest.fn(),
|
|
1185
|
+
getLimit: jest.fn(),
|
|
1186
|
+
getDocId: jest.fn(),
|
|
1187
|
+
sortIds: jest.fn(),
|
|
1188
|
+
getGqlFields: jest.fn()
|
|
1189
|
+
}
|
|
1190
|
+
};
|
|
1191
|
+
<span class="cstat-no" title="statement not covered" > await jest.isolateModulesAsync(<span class="fstat-no" title="function not covered" >as</span>ync () => {</span>
|
|
1192
|
+
<span class="cstat-no" title="statement not covered" > jest.unstable_mockModule('./arangodbUtils.js', <span class="fstat-no" title="function not covered" >()</span> => <span class="cstat-no" title="statement not covered" >mock)</span>;</span>
|
|
1193
|
+
});
|
|
1194
|
+
};
|
|
1195
|
+
|
|
1196
|
+
// Utility to clear all mocks
|
|
1197
|
+
export const clearAllMocks = <span class="fstat-no" title="function not covered" >()</span> => {
|
|
1198
|
+
<span class="cstat-no" title="statement not covered" > jest.clearAllMocks();</span>
|
|
1199
|
+
};
|
|
1200
|
+
|
|
1201
|
+
// Utility to create a test suite for action functions
|
|
1202
|
+
export const createActionTestSuite = <span class="fstat-no" title="function not covered" >(</span>
|
|
1203
|
+
name: string,
|
|
1204
|
+
actionsPath: string,
|
|
1205
|
+
testCases: Array<{
|
|
1206
|
+
name: string;
|
|
1207
|
+
actionName: string;
|
|
1208
|
+
args: TestArgs;
|
|
1209
|
+
mockQuery: jest.Mock;
|
|
1210
|
+
expectedResult: TestReturnValue;
|
|
1211
|
+
}>
|
|
1212
|
+
) => {
|
|
1213
|
+
<span class="cstat-no" title="statement not covered" > describe(`${name} actions`, <span class="fstat-no" title="function not covered" >()</span> => {</span>
|
|
1214
|
+
let actions: any;
|
|
1215
|
+
|
|
1216
|
+
<span class="cstat-no" title="statement not covered" > beforeAll(<span class="fstat-no" title="function not covered" >as</span>ync () => {</span>
|
|
1217
|
+
<span class="cstat-no" title="statement not covered" > actions = await import(actionsPath);</span>
|
|
1218
|
+
});
|
|
1219
|
+
|
|
1220
|
+
<span class="cstat-no" title="statement not covered" > testCases.forEach(<span class="fstat-no" title="function not covered" >({</span>name: testName, actionName, args, mockQuery, expectedResult}) => {</span>
|
|
1221
|
+
<span class="cstat-no" title="statement not covered" > it(`should execute ${actionName}`, <span class="fstat-no" title="function not covered" >as</span>ync () => {</span>
|
|
1222
|
+
const mockContext = <span class="cstat-no" title="statement not covered" >createMockContext();</span>
|
|
1223
|
+
const mockDb = <span class="cstat-no" title="statement not covered" >jest.fn().mockReturnValue({</span>
|
|
1224
|
+
query: mockQuery
|
|
1225
|
+
});
|
|
1226
|
+
const actual = <span class="cstat-no" title="statement not covered" >jest.requireActual('./arangodbUtils.js') as Record<string, unknown>;</span>
|
|
1227
|
+
<span class="cstat-no" title="statement not covered" > jest.doMock('./arangodbUtils.js', <span class="fstat-no" title="function not covered" >()</span> => (<span class="cstat-no" title="statement not covered" >{</span></span>
|
|
1228
|
+
useDb: mockDb,
|
|
1229
|
+
...actual
|
|
1230
|
+
}));
|
|
1231
|
+
|
|
1232
|
+
const result = <span class="cstat-no" title="statement not covered" >await (actions[actionName] as jest.Mock)(mockContext, args);</span>
|
|
1233
|
+
<span class="cstat-no" title="statement not covered" > expect(result).toEqual(expectedResult);</span>
|
|
1234
|
+
});
|
|
1235
|
+
});
|
|
1236
|
+
});
|
|
1237
|
+
};
|
|
1238
|
+
|
|
1239
|
+
export const createAdapterTestSuite = <span class="fstat-no" title="function not covered" >(</span>
|
|
1240
|
+
name: string,
|
|
1241
|
+
adapterPath: string,
|
|
1242
|
+
testCases: any[]
|
|
1243
|
+
) => {
|
|
1244
|
+
<span class="cstat-no" title="statement not covered" > describe(name, <span class="fstat-no" title="function not covered" >()</span> => {</span>
|
|
1245
|
+
let adapter: any;
|
|
1246
|
+
|
|
1247
|
+
<span class="cstat-no" title="statement not covered" > beforeAll(<span class="fstat-no" title="function not covered" >as</span>ync () => {</span>
|
|
1248
|
+
<span class="cstat-no" title="statement not covered" > adapter = await import(adapterPath);</span>
|
|
1249
|
+
});
|
|
1250
|
+
|
|
1251
|
+
<span class="cstat-no" title="statement not covered" > testCases.forEach(<span class="fstat-no" title="function not covered" >({</span>name: testName, input, expectedOutput}) => {</span>
|
|
1252
|
+
<span class="cstat-no" title="statement not covered" > it(`should ${testName}`, <span class="fstat-no" title="function not covered" >()</span> => {</span>
|
|
1253
|
+
const result = <span class="cstat-no" title="statement not covered" >(adapter as {parseTag: (input: TestArgs) => TestReturnValue}).parseTag(input);</span>
|
|
1254
|
+
<span class="cstat-no" title="statement not covered" > expect(result).toEqual(expectedOutput);</span>
|
|
1255
|
+
});
|
|
1256
|
+
});
|
|
1257
|
+
});
|
|
1258
|
+
};
|
|
1259
|
+
|
|
1260
|
+
export const createUtilsTestSuite = <span class="fstat-no" title="function not covered" >(</span>
|
|
1261
|
+
name: string,
|
|
1262
|
+
utilsPath: string,
|
|
1263
|
+
testCases: Array<{
|
|
1264
|
+
name: string;
|
|
1265
|
+
input: TestArgs;
|
|
1266
|
+
expectedOutput: TestReturnValue;
|
|
1267
|
+
}>
|
|
1268
|
+
) => {
|
|
1269
|
+
<span class="cstat-no" title="statement not covered" > describe(name, <span class="fstat-no" title="function not covered" >()</span> => {</span>
|
|
1270
|
+
let utils: any;
|
|
1271
|
+
|
|
1272
|
+
<span class="cstat-no" title="statement not covered" > beforeAll(<span class="fstat-no" title="function not covered" >as</span>ync () => {</span>
|
|
1273
|
+
<span class="cstat-no" title="statement not covered" > utils = await import(utilsPath);</span>
|
|
1274
|
+
});
|
|
1275
|
+
|
|
1276
|
+
<span class="cstat-no" title="statement not covered" > testCases.forEach(<span class="fstat-no" title="function not covered" >({</span>name: testName, input, expectedOutput}) => {</span>
|
|
1277
|
+
<span class="cstat-no" title="statement not covered" > it(`should ${testName}`, <span class="fstat-no" title="function not covered" >()</span> => {</span>
|
|
1278
|
+
let result;
|
|
1279
|
+
<span class="cstat-no" title="statement not covered" > if((utils as {logInfo?: (input: TestArgs) => TestReturnValue}).logInfo) {</span>
|
|
1280
|
+
<span class="cstat-no" title="statement not covered" > result = (utils as {logInfo: (input: TestArgs) => TestReturnValue}).logInfo(input);</span>
|
|
1281
|
+
} else <span class="cstat-no" title="statement not covered" >if((utils as {removeEmptyKeys?: (input: TestArgs) => TestReturnValue}).removeEmptyKeys) {</span>
|
|
1282
|
+
<span class="cstat-no" title="statement not covered" > result = (utils as {removeEmptyKeys: (input: TestArgs) => TestReturnValue}).removeEmptyKeys(input);</span>
|
|
1283
|
+
} else {
|
|
1284
|
+
<span class="cstat-no" title="statement not covered" > throw new Error(`No suitable function found in ${utilsPath}`);</span>
|
|
1285
|
+
}
|
|
1286
|
+
<span class="cstat-no" title="statement not covered" > expect(result).toEqual(expectedOutput);</span>
|
|
1287
|
+
});
|
|
1288
|
+
});
|
|
1289
|
+
});
|
|
1290
|
+
};</pre></td></tr></table></pre>
|
|
1291
|
+
|
|
1292
|
+
<div class='push'></div><!-- for sticky footer -->
|
|
1293
|
+
</div><!-- /wrapper -->
|
|
1294
|
+
<div class='footer quiet pad2 space-top1 center small'>
|
|
1295
|
+
Code coverage generated by
|
|
1296
|
+
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
1297
|
+
at 2025-08-09T01:24:25.331Z
|
|
1298
|
+
</div>
|
|
1299
|
+
<script src="prettify.js"></script>
|
|
1300
|
+
<script>
|
|
1301
|
+
window.onload = function () {
|
|
1302
|
+
prettyPrint();
|
|
1303
|
+
};
|
|
1304
|
+
</script>
|
|
1305
|
+
<script src="sorter.js"></script>
|
|
1306
|
+
<script src="block-navigation.js"></script>
|
|
1307
|
+
</body>
|
|
1308
|
+
</html>
|
|
1309
|
+
|