All files / 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                          1x 1x 1x 1x 1x 1x     1x 2x   1x       1x 1x 1x 1x 1x 2x   2x 2x 1x 1x 1x 1x 1x 1x                     1x   1x         1x 1x 2x 1x         3x 1x       3x 3x 1x 2x 1x 1x   1x         1x 1x   1x   3x     1x        
/* 
 * 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
}