package statuscake
import (
"testing"
//"fmt"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"net/url"
)
func TestSsl_All(t *testing.T) {
assert := assert.New(t)
require := require.New(t)
c := &fakeAPIClient{
fixture: "sslListAllOk.json",
}
tt := NewSsls(c)
ssls, err := tt.All()
require.Nil(err)
assert.Equal("/SSL", c.sentRequestPath)
assert.Equal("GET", c.sentRequestMethod)
assert.Nil(c.sentRequestValues)
assert.Len(ssls, 3)
mixed := make(map[string]string)
flags := make(map[string]bool)
flags["is_extended"] = false
flags["has_pfs"] = true
flags["is_broken"] = false
flags["is_expired"] = false
flags["is_missing"] = false
flags["is_revoked"] = false
flags["has_mixed"] = false
expectedTest := &Ssl{
ID: "143615",
Checkrate: 2073600,
Paused: false,
Domain: "https://www.exemple.com",
IssuerCn: "Let's Encrypt Authority X3",
CertScore: "95",
CipherScore: "100",
CertStatus: "CERT_OK",
Cipher: "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256",
ValidFromUtc: "2019-05-28 01:22:00",
ValidUntilUtc: "2019-08-26 01:22:00",
MixedContent: []map[string]string{},
Flags: flags,
ContactGroups: []string{},
ContactGroupsC: "",
AlertAt: "7,18,2019",
LastReminder: 2019,
AlertReminder: true,
AlertExpiry: true,
AlertBroken: true,
AlertMixed: true,
LastUpdatedUtc: "2019-06-20 10:11:03",
}
assert.Equal(expectedTest, ssls[0])
expectedTest.ID="143617"
expectedTest.LastUpdatedUtc="2019-06-20 10:23:20"
assert.Equal(expectedTest, ssls[2])
expectedTest.ID="143616"
expectedTest.LastUpdatedUtc="2019-06-20 10:23:14"
mixed["type"]="img"
mixed["src"]="http://example.com/image.gif"
expectedTest.MixedContent=[]map[string]string{mixed}
expectedTest.ContactGroupsC="12,13,34"
expectedTest.ContactGroups=[]string{"12","13","34"}
assert.Equal(expectedTest, ssls[1])
}
func TestSsls_Detail_OK(t *testing.T) {
assert := assert.New(t)
require := require.New(t)
c := &fakeAPIClient{
fixture: "sslListAllOk.json",
}
tt := NewSsls(c)
ssl, err := tt.Detail("143616")
require.Nil(err)
assert.Equal("/SSL", c.sentRequestPath)
assert.Equal("GET", c.sentRequestMethod)
assert.Nil(c.sentRequestValues)
mixed := make(map[string]string)
flags := make(map[string]bool)
mixed["type"]="img"
mixed["src"]="http://example.com/image.gif"
flags["is_extended"] = false
flags["has_pfs"] = true
flags["is_broken"] = false
flags["is_expired"] = false
flags["is_missing"] = false
flags["is_revoked"] = false
flags["has_mixed"] = false
expectedTest := &Ssl{
ID: "143616",
Checkrate: 2073600,
Paused: false,
Domain: "https://www.exemple.com",
IssuerCn: "Let's Encrypt Authority X3",
CertScore: "95",
CipherScore: "100",
CertStatus: "CERT_OK",
Cipher: "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256",
ValidFromUtc: "2019-05-28 01:22:00",
ValidUntilUtc: "2019-08-26 01:22:00",
MixedContent: []map[string]string{mixed},
Flags: flags,
ContactGroups: []string{"12","13","34"},
ContactGroupsC: "12,13,34",
AlertAt: "7,18,2019",
LastReminder: 2019,
AlertReminder: true,
AlertExpiry: true,
AlertBroken: true,
AlertMixed: true,
LastUpdatedUtc: "2019-06-20 10:23:14",
}
assert.Equal(expectedTest, ssl)
}
func TestSsls_CreatePartial_OK(t *testing.T) {
assert := assert.New(t)
require := require.New(t)
c := &fakeAPIClient{
fixture: "sslCreateOk.json",
}
tt := NewSsls(c)
partial := &PartialSsl{
Domain: "https://www.exemple.com",
Checkrate: "2073600",
ContactGroupsC: "",
AlertReminder: true,
AlertExpiry: true,
AlertBroken: true,
AlertMixed: true,
AlertAt: "7,18,2019",
}
expectedRes := &PartialSsl {
ID: 143616,
Domain: "https://www.exemple.com",
Checkrate: "2073600",
ContactGroupsC: "",
AlertReminder: true,
AlertExpiry: true,
AlertBroken: true,
AlertMixed: true,
AlertAt: "7,18,2019",
}
res, err := tt.CreatePartial(partial)
require.Nil(err)
assert.Equal("/SSL/Update", c.sentRequestPath)
assert.Equal("PUT", c.sentRequestMethod)
assert.Equal(c.sentRequestValues,url.Values(url.Values{"domain":[]string{"https://www.exemple.com"}, "checkrate":[]string{"2073600"}, "contact_groups":[]string{""}, "alert_at":[]string{"7,18,2019"}, "alert_expiry":[]string{"true"}, "alert_reminder":[]string{"true"}, "alert_broken":[]string{"true"}, "alert_mixed":[]string{"true"}}))
assert.Equal(expectedRes, res)
}
func TestSsls_UpdatePartial_OK(t *testing.T) {
assert := assert.New(t)
require := require.New(t)
c := &fakeAPIClient{
fixture: "sslUpdateOk.json",
}
tt := NewSsls(c)
partial := &PartialSsl{
ID: 143616,
Domain: "https://www.exemple.com",
Checkrate: "2073600",
ContactGroupsC: "",
AlertReminder: false,
AlertExpiry: true,
AlertBroken: true,
AlertMixed: true,
AlertAt: "7,18,2019",
}
expectedRes := &PartialSsl {
ID: 143616,
Domain: "https://www.exemple.com",
Checkrate: "2073600",
ContactGroupsC: "",
AlertReminder: false,
AlertExpiry: true,
AlertBroken: true,
AlertMixed: true,
AlertAt: "7,18,2019",
}
res, err := tt.UpdatePartial(partial)
require.Nil(err)
assert.Equal(expectedRes, res)
assert.Equal("/SSL/Update", c.sentRequestPath)
assert.Equal("PUT", c.sentRequestMethod)
assert.Equal(c.sentRequestValues,url.Values(url.Values{"id":[]string{"143616"},"domain":[]string{"https://www.exemple.com"}, "checkrate":[]string{"2073600"}, "contact_groups":[]string{""}, "alert_at":[]string{"7,18,2019"}, "alert_expiry":[]string{"true"}, "alert_reminder":[]string{"false"}, "alert_broken":[]string{"true"}, "alert_mixed":[]string{"true"}}))
}
func TestSsl_complete_OK(t *testing.T) {
assert := assert.New(t)
require := require.New(t)
c := &fakeAPIClient{
fixture: "sslListAllOk.json",
}
tt := NewSsls(c)
partial := &PartialSsl {
ID: 143616,
Domain: "https://www.exemple.com",
Checkrate: "2073600",
ContactGroupsC: "12,13,34",
AlertReminder: true,
AlertExpiry: true,
AlertBroken: true,
AlertMixed: true,
AlertAt: "7,18,2019",
}
full, err := tt.completeSsl(partial)
require.Nil(err)
mixed := make(map[string]string)
flags := make(map[string]bool)
mixed["type"]="img"
mixed["src"]="http://example.com/image.gif"
flags["is_extended"] = false
flags["has_pfs"] = true
flags["is_broken"] = false
flags["is_expired"] = false
flags["is_missing"] = false
flags["is_revoked"] = false
flags["has_mixed"] = false
expectedTest := &Ssl{
ID: "143616",
Checkrate: 2073600,
Paused: false,
Domain: "https://www.exemple.com",
IssuerCn: "Let's Encrypt Authority X3",
CertScore: "95",
CipherScore: "100",
CertStatus: "CERT_OK",
Cipher: "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256",
ValidFromUtc: "2019-05-28 01:22:00",
ValidUntilUtc: "2019-08-26 01:22:00",
MixedContent: []map[string]string{mixed},
Flags: flags,
ContactGroups: []string{"12","13","34"},
ContactGroupsC: "12,13,34",
AlertAt: "7,18,2019",
LastReminder: 2019,
AlertReminder: true,
AlertExpiry: true,
AlertBroken: true,
AlertMixed: true,
LastUpdatedUtc: "2019-06-20 10:23:14",
}
assert.Equal(expectedTest, full)
}
func TestSsl_partial_OK(t *testing.T) {
assert := assert.New(t)
require := require.New(t)
mixed := make(map[string]string)
flags := make(map[string]bool)
mixed["type"]="img"
mixed["src"]="http://example.com/image.gif"
flags["is_extended"] = false
flags["has_pfs"] = true
flags["is_broken"] = false
flags["is_expired"] = false
flags["is_missing"] = false
flags["is_revoked"] = false
flags["has_mixed"] = false
full := &Ssl{
ID: "143616",
Checkrate: 2073600,
Paused: false,
Domain: "https://www.exemple.com",
IssuerCn: "Let's Encrypt Authority X3",
CertScore: "95",
CipherScore: "100",
CertStatus: "CERT_OK",
Cipher: "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256",
ValidFromUtc: "2019-05-28 01:22:00",
ValidUntilUtc: "2019-08-26 01:22:00",
MixedContent: []map[string]string{mixed},
Flags: flags,
ContactGroups: []string{"12","13","34"},
ContactGroupsC: "12,13,34",
AlertAt: "7,18,2019",
LastReminder: 2019,
AlertReminder: true,
AlertExpiry: true,
AlertBroken: true,
AlertMixed: true,
LastUpdatedUtc: "2019-06-20 10:23:14",
}
expectedTest:=&PartialSsl {
ID: 143616,
Domain: "https://www.exemple.com",
Checkrate: "2073600",
ContactGroupsC: "12,13,34",
AlertReminder: true,
AlertExpiry: true,
AlertBroken: true,
AlertMixed: true,
AlertAt: "7,18,2019",
}
partial,err:=Partial(full)
require.Nil(err)
assert.Equal(expectedTest, partial)
}
func TestSsls_Delete_OK(t *testing.T) {
assert := assert.New(t)
require := require.New(t)
c := &fakeAPIClient{
fixture: "sslDeleteOk.json",
}
tt := NewSsls(c)
err := tt.Delete("143616")
require.Nil(err)
assert.Equal("/SSL/Update", c.sentRequestPath)
assert.Equal("DELETE", c.sentRequestMethod)
assert.Equal(c.sentRequestValues,url.Values(url.Values{"id":[]string{"143616"},},))
}