All files / lib/backend-operations/appsync-operations/helpers helper-apiKeys.js

88% Statements 44/50
72.73% Branches 24/33
100% Functions 4/4
87.76% Lines 43/49

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98                          25x 25x 25x 25x 25x 25x     1x 2x   1x       2x 2x 2x 2x 2x 4x   4x 4x 2x 2x 2x 2x 2x 2x                     2x   2x         2x 2x 4x 2x         6x 2x       6x 6x 2x 4x 2x 2x   2x         2x 2x   2x   6x     25x        
/* 
 * Copyright 2017-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance with
 * the License. A copy of the License is located at
 *
 *     http://aws.amazon.com/apache2.0/
 *
 * or in the "license" file accompanying this file. This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
 * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions
 * and limitations under the License.
*/
"use strict";
const awsmobilejsConstant = require('../../../utils/awsmobilejs-constant.js')
const DIFF = awsmobilejsConstant.DiffMark
const CREATE = awsmobilejsConstant.DiffMark_Create
const UPDATE = awsmobilejsConstant.DiffMark_Update
const NONE = awsmobilejsConstant.DiffMark_None
const DELETE = awsmobilejsConstant.DiffMark_Delete
 
function dressForDevBackend(apiKeys){
    for(let i=0;i<apiKeys.length;i++){
        apiKeys[i].id = awsmobilejsConstant.ByAWSMobileCLI + ':' + i
    }
    return apiKeys
}
 
function diff(appsyncUpdateHandle){
    let diffMarkedApiKeys = []
    let currentApiKeys = appsyncUpdateHandle.currentAppSyncInfo.apiKeys
    let devApiKeys = appsyncUpdateHandle.devAppSyncInfo.apiKeys
    Eif(devApiKeys && devApiKeys.length>0){
        for(let i=0;i<devApiKeys.length;i++){
            let devApiKey = devApiKeys[i]
            let currentApiKey
            let regex = new RegExp('^'+awsmobilejsConstant.ByAWSMobileCLI)
            if(devApiKey.id && currentApiKeys && currentApiKeys.length>0){
                Eif(regex.test(devApiKey.id)){
                    let strs = devApiKey.id.split(':')
                    Eif(strs.length>1){
                        let index = parseInt(strs[1])
                        Eif(!isNaN(index) && index < currentApiKeys.length){
                            currentApiKey = currentApiKeys[index]
                        }
                    }
                }else{
                    for(let j=0;j<currentApiKeys.length;j++){
                        if(devApiKey.id == currentApiKeys[i].id){
                            currentApiKey = currentApiKeys[i]
                            break
                        }
                    }
                }
                diffMarkedApiKeys.push(markDiff(devApiKey, currentApiKey))
            }else{
                diffMarkedApiKeys.push(markDiff(devApiKey, null))
            }
        }
    }
 
    Eif(currentApiKeys && currentApiKeys.length>0){
        for(let j=0;j<currentApiKeys.length;j++){
            if(!currentApiKeys[j][DIFF]){
                diffMarkedApiKeys.push(markDiff(undefined, currentApiKeys[j]))
            }
        }
    }
 
    diffMarkedApiKeys = diffMarkedApiKeys.filter(item=>item[DIFF] != NONE)
    return diffMarkedApiKeys
}
 
function markDiff(devApiKey, currentApiKey){
    let result = devApiKey
    if(!currentApiKey){
        devApiKey[DIFF] = CREATE
    }else if(!devApiKey){
        currentApiKey[DIFF] = DELETE
        result = currentApiKey
    }else{
        Iif(devApiKey.description == currentApiKey.description && 
            devApiKey.expires == currentApiKey.expires){
            devApiKey[DIFF] = NONE
            currentApiKey[DIFF] = NONE
        }else{
            devApiKey[DIFF] = UPDATE
            currentApiKey[DIFF] = UPDATE
        }
        result = currentApiKey
    }
    return result
}
 
module.exports = {
    dressForDevBackend, 
    diff
}