예제 #1
0
파일: handler.go 프로젝트: helphone/api
func getCountries(w http.ResponseWriter, r *http.Request) {
	query := r.URL.Query()
	languageCode := query.Get("language")
	if languageCode == "" {
		languageCode = "en"
	}

	countryCode, err := getCountryFromLatAndLong(w, r)
	if err != nil {
		return
	}

	var data *model.Response

	if countryCode == "" {
		data, err = manager.GetCountries(languageCode)
	} else {
		data, err = manager.GetCountry(countryCode, languageCode)
	}

	if err != nil {
		fmt.Fprintf(w, "%s", err)
		return
	}

	response, err := json.Marshal(data)
	if err != nil {
		fmt.Fprintf(w, "%s", err)
		return
	}

	renderWithETag(w, r, response)
}
예제 #2
0
파일: helper_test.go 프로젝트: helphone/api
func TestRenderWithETag(t *testing.T) {
	req, w := prepareRequest("test")
	response, _ := manager.GetCountries("en")
	data, _ := json.Marshal(response)

	renderWithETag(w, req, data)

	contentType := w.Header().Get("Content-Type")
	if contentType != "application/json; charset=utf-8" {
		t.Errorf("Content-Type is not good. Receive %s", contentType)
	}

	eTag := w.Header().Get("ETag")
	if eTag == "" {
		t.Error("ETag should be set")
	}

	req, w = prepareRequest("test")
	req.Header.Set("If-None-Match", eTag)

	renderWithETag(w, req, data)

	if w.Code != http.StatusNotModified {
		t.Errorf("The status code of the second request with ETag should be not modified. Got %v", w.Code)
	}

	if len(w.Body.String()) > 0 {
		t.Errorf("The body of a not modified status should be empty. Got %s", w.Body.String())
	}
}