func (controller *contactsController) newGet(rw http.ResponseWriter, req *http.Request) (int, error) {
	isAuthenticated, user := getCurrentUser(rw, req, controller.authorizer)
	contactEdit := new(viewmodels.ContactsEditViewModel)
	contactEdit.EmailActive = false
	contactEdit.SmsActive = false
	sites, err := getAllSites(controller)
	if err != nil {
		return http.StatusInternalServerError, err
	}
	vm := viewmodels.NewContactViewModel(contactEdit, sites, true,
		isAuthenticated, user, make(map[string]string))
	vm.CsrfField = csrf.TemplateField(req)
	return http.StatusOK, controller.newTemplate.Execute(rw, vm)
}
func (controller *contactsController) editGet(rw http.ResponseWriter, req *http.Request) (int, error) {
	vars := mux.Vars(req)
	contactID, err := strconv.ParseInt(vars["contactID"], 10, 64)
	if err != nil {
		return http.StatusInternalServerError, err
	}
	// Get the contact to edit
	contact := new(database.Contact)
	err = contact.GetContact(controller.DB, contactID)
	if err != nil {
		return http.StatusInternalServerError, err
	}
	isAuthenticated, user := getCurrentUser(rw, req, controller.authorizer)
	contactEdit := new(viewmodels.ContactsEditViewModel)
	contactEdit.Name = contact.Name
	contactEdit.ContactID = contact.ContactID
	contactEdit.EmailAddress = contact.EmailAddress
	contactEdit.SmsNumber = contact.SmsNumber
	contactEdit.EmailActive = contact.EmailActive
	contactEdit.SmsActive = contact.SmsActive
	contactEdit.SelectedSites, err = getContactSiteIDs(controller, contact)
	if err != nil {
		return http.StatusInternalServerError, err
	}

	sites, errGet := getAllSites(controller)
	if errGet != nil {
		return http.StatusInternalServerError, errGet
	}

	vm := viewmodels.EditContactViewModel(contactEdit, sites, isAuthenticated, user, make(map[string]string))
	vm.CsrfField = csrf.TemplateField(req)
	return http.StatusOK, controller.editTemplate.Execute(rw, vm)
}
func (controller *contactsController) deleteGet(rw http.ResponseWriter, req *http.Request) (int, error) {
	vars := mux.Vars(req)
	contactID, err := strconv.ParseInt(vars["contactID"], 10, 64)
	if err != nil {
		return http.StatusInternalServerError, err
	}
	// Get the contact to edit
	contact := new(database.Contact)
	err = contact.GetContact(controller.DB, contactID)
	if err != nil {
		return http.StatusInternalServerError, err
	}
	isAuthenticated, user := getCurrentUser(rw, req, controller.authorizer)
	contactDelete := new(viewmodels.ContactsEditViewModel)
	contactDelete.Name = contact.Name
	contactDelete.ContactID = contact.ContactID
	contactDelete.EmailAddress = contact.EmailAddress
	var noSites = []database.Site{}
	vm := viewmodels.EditContactViewModel(contactDelete, noSites, isAuthenticated,
		user, make(map[string]string))
	vm.CsrfField = csrf.TemplateField(req)
	return http.StatusOK, controller.deleteTemplate.Execute(rw, vm)
}
func TestValidateContactValid(t *testing.T) {
	c := new(viewmodels.ContactsEditViewModel)
	c.Name = ""
	c.SmsActive = false
	c.EmailActive = false
	c.SmsNumber = ""
	c.EmailAddress = ""
	valErrors := validateContactForm(c)
	if !strings.Contains(valErrors["Name"], "non zero value required") {
		t.Error("Name should show error for required.")
	}

	c.Name = "Jane Doe"
	c.SmsActive = true
	c.EmailActive = false
	c.SmsNumber = ""
	valErrors = validateContactForm(c)
	if !strings.Contains(valErrors["SmsNumber"], "Text Message Number must be provided") {
		t.Error("Text Message Validation should show error for required if active.")
	}

	c.SmsActive = false
	c.EmailActive = true
	c.EmailAddress = ""
	valErrors = validateContactForm(c)
	if !strings.Contains(valErrors["EmailAddress"], "Email Address must be provided") {
		t.Error("Email Address Validation should show error for required if active.")
	}

	c.SmsActive = false
	c.EmailActive = true
	c.EmailAddress = "jack.example.com"
	valErrors = validateContactForm(c)
	if !strings.Contains(valErrors["EmailAddress"], "does not validate as email") {
		t.Error("Email Address Validation should show error for invalid email.")
	}

	c.SmsActive = true
	c.EmailActive = false
	c.SmsNumber = "Foobar"
	valErrors = validateContactForm(c)
	if !strings.Contains(valErrors["SmsNumber"], "The Text Message Number must be provided in E.164 format") {
		t.Error("Text Message Validation should show error for incorrect number.")
	}

	c.SmsNumber = "1234567890123456"
	valErrors = validateContactForm(c)
	if !strings.Contains(valErrors["SmsNumber"], "The Text Message Number must be provided in E.164 format") {
		t.Error("Text Message Validation should show error for incorrect number.")
	}

	c.SmsNumber = "+15127712936"
	c.Name = "Jane Doe"
	c.SmsActive = true
	c.EmailActive = true
	c.EmailAddress = "*****@*****.**"
	valErrors = validateContactForm(c)
	if len(valErrors) > 0 {
		t.Error("No errors should be flagged for the set of inputs.")
	}
}