diff --git a/cmd/tfstated/unlock.go b/cmd/tfstated/unlock.go
index af5ad57..e8bddd9 100644
--- a/cmd/tfstated/unlock.go
+++ b/cmd/tfstated/unlock.go
@@ -1,8 +1,6 @@
 package main
 
 import (
-	"database/sql"
-	"errors"
 	"fmt"
 	"net/http"
 
@@ -23,12 +21,7 @@ func handleUnlock(db *database.DB) http.Handler {
 			return
 		}
 		if success, err := db.Unlock(r.URL.Path, &lock); err != nil {
-			if errors.Is(err, sql.ErrNoRows) {
-				_ = encode(w, http.StatusNotFound,
-					fmt.Errorf("state path not found: %s", r.URL.Path))
-			} else {
-				_ = errorResponse(w, http.StatusInternalServerError, err)
-			}
+			_ = errorResponse(w, http.StatusInternalServerError, err)
 		} else if success {
 			w.WriteHeader(http.StatusOK)
 		} else {
diff --git a/cmd/tfstated/unlock_test.go b/cmd/tfstated/unlock_test.go
new file mode 100644
index 0000000..c259614
--- /dev/null
+++ b/cmd/tfstated/unlock_test.go
@@ -0,0 +1,43 @@
+package main
+
+import (
+	"io"
+	"net/http"
+	"net/url"
+	"strings"
+	"testing"
+)
+
+func TestUnlock(t *testing.T) {
+	tests := []struct {
+		method string
+		uri    *url.URL
+		body   io.Reader
+		expect string
+		status int
+		msg    string
+	}{
+		{"UNLOCK", &url.URL{Path: "/"}, nil, "", http.StatusBadRequest, "/"},
+		{"UNLOCK", &url.URL{Path: "/non_existent_lock"}, nil, "", http.StatusBadRequest, "no lock data on non existent state"},
+		{"UNLOCK", &url.URL{Path: "/non_existent_lock"}, strings.NewReader("{\"ID\":\"00000000-0000-0000-0000-000000000000\"}"), "", http.StatusConflict, "valid lock data on non existent state"},
+		{"LOCK", &url.URL{Path: "/test_unlock"}, strings.NewReader("{\"ID\":\"00000000-0000-0000-0000-000000000000\"}"), "", http.StatusOK, "valid lock data on non existent state should create it empty"},
+		{"UNLOCK", &url.URL{Path: "/test_unlock"}, strings.NewReader("{\"ID\":\"FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF\"}"), "", http.StatusConflict, "valid but wrong lock data on a locked state"},
+		{"UNLOCK", &url.URL{Path: "/test_unlock"}, strings.NewReader("{\"ID\":\"00000000-0000-0000-0000-000000000000\"}"), "", http.StatusOK, "valid and correct lock data on a locked state"},
+		{"UNLOCK", &url.URL{Path: "/test_unlock"}, strings.NewReader("{\"ID\":\"00000000-0000-0000-0000-000000000000\"}"), "", http.StatusConflict, "valid and correct lock data on a now unlocked state"},
+	}
+	for _, tt := range tests {
+		runHTTPRequest(tt.method, tt.uri, tt.body, func(r *http.Response, err error) {
+			if err != nil {
+				t.Fatalf("failed %s with error: %+v", tt.method, err)
+			} else if r.StatusCode != tt.status {
+				t.Fatalf("%s %s should %s, got %s", tt.method, tt.msg, http.StatusText(tt.status), http.StatusText(r.StatusCode))
+			} else if tt.expect != "" {
+				if body, err := io.ReadAll(r.Body); err != nil {
+					t.Fatalf("failed to read body with error: %+v", err)
+				} else if strings.Compare(string(body), tt.expect) != 0 {
+					t.Fatalf("%s should have returned \"%s\", got %s", tt.method, tt.expect, string(body))
+				}
+			}
+		})
+	}
+}