// Copyright 2017 Google Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package accessEntity

import (
	"github.com/apid/apid-core"
	"github.com/apid/apidVerifyApiKey/common"
	. "github.com/onsi/ginkgo"
	. "github.com/onsi/gomega"
	"io/ioutil"
	"sync"
)

const (
	fileDataTest = "data_test.sql"
)

var _ = Describe("DataTest", func() {

	Context("query Db to get entities", func() {
		var dataTestTempDir string
		var dbMan *DbManager
		BeforeEach(func() {
			var err error
			dataTestTempDir, err = ioutil.TempDir(testTempDirBase, "sqlite3")
			Expect(err).NotTo(HaveOccurred())
			services.Config().Set("local_storage_path", dataTestTempDir)

			dbMan = &DbManager{
				DbManager: common.DbManager{
					Data:  services.Data(),
					DbMux: sync.RWMutex{},
				},
			}
			dbMan.SetDbVersion(dataTestTempDir)
			setupTestDb(dbMan.GetDb())
		})

		Describe("Get structs", func() {
			It("should get apiProducts", func() {
				testData := [][]string{
					//positive tests
					{IdentifierApiProductName, "apstest", "", "", "apid-haoming"},
					{IdentifierAppId, "408ad853-3fa0-402f-90ee-103de98d71a5", "", "", "apid-haoming"},
					{IdentifierAppId, "408ad853-3fa0-402f-90ee-103de98d71a5", IdentifierApiResource, "/**", "apid-haoming"},
					{IdentifierAppName, "apstest", "", "", "apid-haoming"},
					{IdentifierConsumerKey, "abcd", "", "", "apid-haoming"},
					{IdentifierConsumerKey, "abcd", IdentifierApiResource, "/**", "apid-haoming"},
					{IdentifierAppName, "apstest", IdentifierDeveloperId, "e41f04e8-9d3f-470a-8bfd-c7939945896c", "apid-haoming"},
					{IdentifierAppName, "apstest", IdentifierDeveloperEmail, "bar@google.com", "apid-haoming"},
					{IdentifierAppName, "testappahhis", IdentifierCompanyName, "testcompanyhflxv", "apid-haoming"},
					{IdentifierAppName, "apstest", IdentifierApiResource, "/**", "apid-haoming"},
					// negative tests
					{IdentifierApiProductName, "apstest", "", "", "non-existent"},
					{IdentifierApiProductName, "non-existent", "", "", "apid-haoming"},
					{IdentifierAppId, "non-existent", "", "", "apid-haoming"},
					{IdentifierAppId, "non-existent", IdentifierApiResource, "non-existent", "apid-haoming"},
					{IdentifierAppName, "non-existent", "", "", "apid-haoming"},
					{IdentifierConsumerKey, "non-existent", "", "", "apid-haoming"},
					{IdentifierConsumerKey, "non-existent", IdentifierApiResource, "non-existent", "apid-haoming"},
					{IdentifierAppName, "non-existent", IdentifierDeveloperId, "non-existent", "apid-haoming"},
					{IdentifierAppName, "non-existent", IdentifierDeveloperEmail, "non-existent", "apid-haoming"},
					{IdentifierAppName, "non-existent", IdentifierCompanyName, "non-existent", "apid-haoming"},
					{IdentifierAppName, "non-existent", IdentifierApiResource, "non-existent", "apid-haoming"},
				}

				var expectedDevApiProd = common.ApiProduct{
					Id:            "b7e0970c-4677-4b05-8105-5ea59fdcf4e7",
					Name:          "apstest",
					DisplayName:   "apstest",
					Description:   "",
					ApiResources:  "{/**}",
					ApprovalType:  "AUTO",
					Scopes:        `{""}`,
					Proxies:       `{aps,perfBenchmark}`,
					Environments:  `{prod,test}`,
					Quota:         "10000000",
					QuotaTimeUnit: "MINUTE",
					QuotaInterval: 1,
					CreatedAt:     "2017-08-18 22:12:49.363+00:00",
					CreatedBy:     "haoming@apid.git",
					UpdatedAt:     "2017-08-18 22:26:50.153+00:00",
					UpdatedBy:     "haoming@apid.git",
					TenantId:      "515211e9",
				}

				var expectedComApiProd = common.ApiProduct{
					Id:            "fea8a6d5-8d34-477f-ac82-c397eaec06af",
					Name:          "testproductsdljnkpt",
					DisplayName:   "testproductsdljnkpt",
					Description:   "",
					ApiResources:  "{/res1}",
					ApprovalType:  "AUTO",
					Scopes:        `{}`,
					Proxies:       `{}`,
					Environments:  `{test}`,
					Quota:         "",
					QuotaTimeUnit: "",
					QuotaInterval: 0,
					CreatedAt:     "2017-11-02 16:00:15.608+00:00",
					CreatedBy:     "haoming@apid.git",
					UpdatedAt:     "2017-11-02 16:00:18.125+00:00",
					UpdatedBy:     "haoming@apid.git",
					TenantId:      "515211e9",
				}

				results := [][]common.ApiProduct{
					{expectedDevApiProd},
					{expectedDevApiProd},
					{expectedDevApiProd},
					{expectedDevApiProd},
					{expectedDevApiProd},
					{expectedDevApiProd},
					{expectedDevApiProd},
					{expectedDevApiProd},
					{expectedComApiProd},
					{expectedDevApiProd},
					nil,
					nil,
					nil,
					nil,
					nil,
					nil,
					nil,
					nil,
					nil,
					nil,
					nil,
				}

				for i, data := range testData {
					priKey, priVal, secKey, secVal, org := data[0], data[1], data[2], data[3], data[4]
					prods, err := dbMan.GetApiProducts(org, priKey, priVal, secKey, secVal)
					Expect(err).Should(Succeed())
					if len(results[i]) > 0 {
						Expect(prods).Should(Equal(results[i]))
					} else {
						Expect(prods).Should(BeZero())
					}
				}
			})

			It("should get apps", func() {
				testData := [][]string{
					//positive tests
					{IdentifierAppId, "408ad853-3fa0-402f-90ee-103de98d71a5", "", "", "apid-haoming"},
					{IdentifierAppName, "apstest", "", "", "apid-haoming"},
					{IdentifierAppName, "apstest", IdentifierDeveloperId, "e41f04e8-9d3f-470a-8bfd-c7939945896c", "apid-haoming"},
					{IdentifierAppName, "apstest", IdentifierDeveloperEmail, "bar@google.com", "apid-haoming"},
					{IdentifierAppName, "testappahhis", IdentifierCompanyName, "testcompanyhflxv", "apid-haoming"},
					{IdentifierConsumerKey, "abcd", "", "", "apid-haoming"},
					// negative tests
					{IdentifierAppId, "408ad853-3fa0-402f-90ee-103de98d71a5", "", "", "non-existent"},
					{IdentifierAppId, "non-existent", "", "", "apid-haoming"},
					{IdentifierAppName, "non-existent", "", "", "apid-haoming"},
					{IdentifierAppName, "non-existent", IdentifierDeveloperId, "non-existent", "apid-haoming"},
					{IdentifierAppName, "non-existent", IdentifierDeveloperEmail, "non-existent", "apid-haoming"},
					{IdentifierAppName, "non-existent", IdentifierCompanyName, "non-existent", "apid-haoming"},
					{IdentifierConsumerKey, "non-existent", "", "", "apid-haoming"},
				}

				var expectedDevApp = common.App{
					Id:          "408ad853-3fa0-402f-90ee-103de98d71a5",
					TenantId:    "515211e9",
					Name:        "apstest",
					DisplayName: "apstest",
					AccessType:  "READ",
					CallbackUrl: "https://www.google.com",
					Status:      "APPROVED",
					AppFamily:   "default",
					CompanyId:   "",
					DeveloperId: "e41f04e8-9d3f-470a-8bfd-c7939945896c",
					ParentId:    "e41f04e8-9d3f-470a-8bfd-c7939945896c",
					Type:        "DEVELOPER",
					CreatedAt:   "2017-08-18 22:13:18.325+00:00",
					CreatedBy:   "haoming@apid.git",
					UpdatedAt:   "2017-08-18 22:13:18.325+00:00",
					UpdatedBy:   "haoming@apid.git",
				}

				var expectedComApp = common.App{
					Id:          "35608afe-2715-4064-bb4d-3cbb4e82c474",
					TenantId:    "515211e9",
					Name:        "testappahhis",
					DisplayName: "testappahhis",
					AccessType:  "READ",
					CallbackUrl: "",
					Status:      "APPROVED",
					AppFamily:   "default",
					CompanyId:   "a94f75e2-69b0-44af-8776-155df7c7d22e",
					DeveloperId: "",
					ParentId:    "a94f75e2-69b0-44af-8776-155df7c7d22e",
					Type:        "COMPANY",
					CreatedAt:   "2017-11-02 16:00:16.504+00:00",
					CreatedBy:   "haoming@apid.git",
					UpdatedAt:   "2017-11-02 16:00:16.504+00:00",
					UpdatedBy:   "haoming@apid.git",
				}

				results := [][]common.App{
					{expectedDevApp},
					{expectedDevApp},
					{expectedDevApp},
					{expectedDevApp},
					{expectedComApp},
					{expectedDevApp},
					nil,
					nil,
					nil,
					nil,
					nil,
					nil,
					nil,
				}

				for i, data := range testData {
					priKey, priVal, secKey, secVal, org := data[0], data[1], data[2], data[3], data[4]
					apps, err := dbMan.GetApps(org, priKey, priVal, secKey, secVal)
					Expect(err).Should(Succeed())
					if len(results[i]) > 0 {
						Expect(apps).Should(Equal(results[i]))
					} else {
						Expect(apps).Should(BeZero())
					}
				}
			})

			It("should get Companies", func() {
				testData := [][]string{
					//positive tests
					{IdentifierAppId, "35608afe-2715-4064-bb4d-3cbb4e82c474", "", "", "apid-haoming"},
					{IdentifierCompanyName, "testcompanyhflxv", "", "", "apid-haoming"},
					{IdentifierConsumerKey, "wxyz", "", "", "apid-haoming"},
					// negative tests
					{IdentifierAppId, "35608afe-2715-4064-bb4d-3cbb4e82c474", "", "", "non-existent"},
					{IdentifierAppId, "non-existent", "", "", "apid-haoming"},
					{IdentifierCompanyName, "non-existent", "", "", "apid-haoming"},
					{IdentifierConsumerKey, "non-existent", "", "", "apid-haoming"},
				}

				var expectedCom = common.Company{
					Id:          "a94f75e2-69b0-44af-8776-155df7c7d22e",
					TenantId:    "515211e9",
					Name:        "testcompanyhflxv",
					DisplayName: "testcompanyhflxv",
					Status:      "ACTIVE",
					CreatedAt:   "2017-11-02 16:00:16.287+00:00",
					CreatedBy:   "haoming@apid.git",
					UpdatedAt:   "2017-11-02 16:00:16.287+00:00",
					UpdatedBy:   "haoming@apid.git",
				}

				results := [][]common.Company{
					{expectedCom},
					{expectedCom},
					{expectedCom},
					nil,
					nil,
					nil,
					nil,
				}

				for i, data := range testData {
					priKey, priVal, secKey, secVal, org := data[0], data[1], data[2], data[3], data[4]
					apps, err := dbMan.GetCompanies(org, priKey, priVal, secKey, secVal)
					Expect(err).Should(Succeed())
					if len(results[i]) > 0 {
						Expect(apps).Should(Equal(results[i]))
					} else {
						Expect(apps).Should(BeZero())
					}
				}
			})

			It("should get developers", func() {
				testData := [][]string{
					//positive tests
					{IdentifierAppId, "408ad853-3fa0-402f-90ee-103de98d71a5", "", "", "apid-haoming"},
					{IdentifierConsumerKey, "abcd", "", "", "apid-haoming"},
					{IdentifierDeveloperEmail, "bar@google.com", "", "", "apid-haoming"},
					{IdentifierDeveloperId, "e41f04e8-9d3f-470a-8bfd-c7939945896c", "", "", "apid-haoming"},

					// negative tests
					{IdentifierAppId, "408ad853-3fa0-402f-90ee-103de98d71a5", "", "", "non-existent"},
					{IdentifierAppId, "non-existent", "", "", "apid-haoming"},
					{IdentifierConsumerKey, "non-existent", "", "", "apid-haoming"},
					{IdentifierDeveloperEmail, "non-existent", "", "", "apid-haoming"},
					{IdentifierDeveloperId, "non-existent", "", "", "apid-haoming"},
				}

				var expectedDev = common.Developer{
					Id:                "e41f04e8-9d3f-470a-8bfd-c7939945896c",
					TenantId:          "515211e9",
					UserName:          "haoming",
					FirstName:         "haoming",
					LastName:          "zhang",
					Password:          "",
					Email:             "bar@google.com",
					Status:            "ACTIVE",
					EncryptedPassword: "",
					Salt:              "",
					CreatedAt:         "2017-08-16 22:39:46.669+00:00",
					CreatedBy:         "foo@google.com",
					UpdatedAt:         "2017-08-16 22:39:46.669+00:00",
					UpdatedBy:         "foo@google.com",
				}

				results := [][]common.Developer{
					{expectedDev},
					{expectedDev},
					{expectedDev},
					{expectedDev},
					nil,
					nil,
					nil,
					nil,
					nil,
				}

				for i, data := range testData {
					priKey, priVal, secKey, secVal, org := data[0], data[1], data[2], data[3], data[4]
					prods, err := dbMan.GetDevelopers(org, priKey, priVal, secKey, secVal)
					Expect(err).Should(Succeed())
					if len(results[i]) > 0 {
						Expect(prods).Should(Equal(results[i]))
					} else {
						Expect(prods).Should(BeZero())
					}
				}
			})

			It("should get appCredentials", func() {
				testData := [][]string{
					// positive tests
					{IdentifierConsumerKey, "abcd", "", "", "apid-haoming"},
					{IdentifierAppId, "408ad853-3fa0-402f-90ee-103de98d71a5", "", "", "apid-haoming"},
					// negative tests
					{IdentifierConsumerKey, "abcd", "", "", "non-existent"},
					{IdentifierConsumerKey, "non-existent", "", "", "apid-haoming"},
					{IdentifierAppId, "non-existent", "", "", "apid-haoming"},
				}

				var expectedCred = common.AppCredential{
					Id:             "abcd",
					TenantId:       "515211e9",
					ConsumerSecret: "secret1",
					AppId:          "408ad853-3fa0-402f-90ee-103de98d71a5",
					MethodType:     "",
					Status:         "APPROVED",
					IssuedAt:       "2017-08-18 22:13:18.35+00:00",
					ExpiresAt:      "",
					AppStatus:      "",
					Scopes:         "{}",
					CreatedAt:      "2017-08-18 22:13:18.35+00:00",
					CreatedBy:      "-NA-",
					UpdatedAt:      "2017-08-18 22:13:18.352+00:00",
					UpdatedBy:      "-NA-",
				}

				results := [][]common.AppCredential{
					{expectedCred},
					{expectedCred},
					nil,
					nil,
					nil,
				}

				for i, data := range testData {
					priKey, priVal, secKey, secVal, org := data[0], data[1], data[2], data[3], data[4]
					prods, err := dbMan.GetAppCredentials(org, priKey, priVal, secKey, secVal)
					Expect(err).Should(Succeed())
					if len(results[i]) > 0 {
						Expect(prods).Should(Equal(results[i]))
					} else {
						Expect(prods).Should(BeZero())
					}
				}
			})

			It("should get CompanyDevelopers", func() {
				testData := [][]string{
					// positive tests
					{IdentifierCompanyName, "testcompanyhflxv", "", "", "apid-haoming"},

					// negative tests
					{IdentifierCompanyName, "testcompanyhflxv", "", "", "non-existent"},
					{IdentifierCompanyName, "non-existent", "", "", "apid-haoming"},
				}

				var expectedComDev = common.CompanyDeveloper{
					TenantId:    "515211e9",
					CompanyId:   "a94f75e2-69b0-44af-8776-155df7c7d22e",
					DeveloperId: "590f33bf-f05c-48c1-bb93-183759bd9ee1",
					Roles:       "admin",
					CreatedAt:   "2017-11-02 16:00:16.287+00:00",
					CreatedBy:   "haoming@apid.git",
					UpdatedAt:   "2017-11-02 16:00:16.287+00:00",
					UpdatedBy:   "haoming@apid.git",
				}

				results := [][]common.CompanyDeveloper{
					{expectedComDev},
					nil,
					nil,
				}

				for i, data := range testData {
					priKey, priVal, secKey, secVal, org := data[0], data[1], data[2], data[3], data[4]
					prods, err := dbMan.GetCompanyDevelopers(org, priKey, priVal, secKey, secVal)
					Expect(err).Should(Succeed())
					if len(results[i]) > 0 {
						Expect(prods).Should(Equal(results[i]))
					} else {
						Expect(prods).Should(BeZero())
					}
				}
			})

		})

		Describe("utils", func() {
			It("GetApiProductNamesByConsumerKey", func() {
				data := "abcd"
				expected := []string{"apstest"}
				Expect(dbMan.GetApiProductNames(data, TypeConsumerKey)).Should(Equal(expected))

				data = "408ad853-3fa0-402f-90ee-103de98d71a5"
				expected = []string{"apstest"}
				Expect(dbMan.GetApiProductNames(data, TypeApp)).Should(Equal(expected))
			})

			It("GetAppNames", func() {
				data := "a94f75e2-69b0-44af-8776-155df7c7d22e"
				expected := []string{"testappahhis"}
				Expect(dbMan.GetAppNames(data, TypeCompany)).Should(Equal(expected))

				data = "e41f04e8-9d3f-470a-8bfd-c7939945896c"
				expected = []string{"apstest"}
				Expect(dbMan.GetAppNames(data, TypeDeveloper)).Should(Equal(expected))
			})

			It("GetComNames", func() {
				data := "8ba5b747-5104-4a40-89ca-a0a51798fe34"
				expected := []string{"DevCompany"}
				Expect(dbMan.GetComNames(data, TypeCompany)).Should(Equal(expected))
				data = "590f33bf-f05c-48c1-bb93-183759bd9ee1"
				expected = []string{"testcompanyhflxv"}
				Expect(dbMan.GetComNames(data, TypeDeveloper)).Should(Equal(expected))
			})

			It("GetDevEmailByDevId", func() {
				data := "e41f04e8-9d3f-470a-8bfd-c7939945896c"
				expected := "bar@google.com"
				Expect(dbMan.GetDevEmailByDevId(data)).Should(Equal(expected))
			})

			It("GetStatus", func() {
				data := "e41f04e8-9d3f-470a-8bfd-c7939945896c"
				expected := "ACTIVE"
				Expect(dbMan.GetStatus(data, AppTypeDeveloper)).Should(Equal(expected))
				data = "8ba5b747-5104-4a40-89ca-a0a51798fe34"
				expected = "ACTIVE"
				Expect(dbMan.GetStatus(data, AppTypeCompany)).Should(Equal(expected))
			})

		})

	})

})

func setupTestDb(db apid.DB) {
	bytes, err := ioutil.ReadFile(fileDataTest)
	Expect(err).Should(Succeed())
	query := string(bytes)
	_, err = db.Exec(query)
	Expect(err).Should(Succeed())
}
