mirror of
				https://github.com/photoprism/photoprism.git
				synced 2025-10-31 04:06:43 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			237 lines
		
	
	
		
			9.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			237 lines
		
	
	
		
			9.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package api
 | |
| 
 | |
| import (
 | |
| 	"fmt"
 | |
| 	"github.com/stretchr/testify/assert"
 | |
| 	"github.com/tidwall/gjson"
 | |
| 	"net/http"
 | |
| 	"testing"
 | |
| )
 | |
| 
 | |
| func TestBatchPhotosArchive(t *testing.T) {
 | |
| 	t.Run("successful request", func(t *testing.T) {
 | |
| 		app, router, conf := NewApiTest()
 | |
| 		GetPhoto(router, conf)
 | |
| 		r := PerformRequest(app, "GET", "/api/v1/photos/pt9jtdre2lvl0yh7")
 | |
| 		assert.Equal(t, http.StatusOK, r.Code)
 | |
| 		val := gjson.Get(r.Body.String(), "DeletedAt")
 | |
| 		assert.Empty(t, val.String())
 | |
| 
 | |
| 		BatchPhotosArchive(router, conf)
 | |
| 		r2 := PerformRequestWithBody(app, "POST", "/api/v1/batch/photos/archive", `{"photos": ["pt9jtdre2lvl0yh7", "pt9jtdre2lvl0ycc"]}`)
 | |
| 		val2 := gjson.Get(r2.Body.String(), "message")
 | |
| 		assert.Contains(t, val2.String(), "photos archived")
 | |
| 		assert.Equal(t, http.StatusOK, r2.Code)
 | |
| 
 | |
| 		r3 := PerformRequest(app, "GET", "/api/v1/photos/pt9jtdre2lvl0yh7")
 | |
| 		assert.Equal(t, http.StatusOK, r3.Code)
 | |
| 		val3 := gjson.Get(r3.Body.String(), "DeletedAt")
 | |
| 		assert.NotEmpty(t, val3.String())
 | |
| 	})
 | |
| 	t.Run("no photos selected", func(t *testing.T) {
 | |
| 		app, router, conf := NewApiTest()
 | |
| 		BatchPhotosArchive(router, conf)
 | |
| 		r := PerformRequestWithBody(app, "POST", "/api/v1/batch/photos/archive", `{"photos": []}`)
 | |
| 		val := gjson.Get(r.Body.String(), "error")
 | |
| 		assert.Equal(t, "No photos selected", val.String())
 | |
| 		assert.Equal(t, http.StatusBadRequest, r.Code)
 | |
| 	})
 | |
| 	t.Run("invalid request", func(t *testing.T) {
 | |
| 		app, router, conf := NewApiTest()
 | |
| 		BatchPhotosArchive(router, conf)
 | |
| 		r := PerformRequestWithBody(app, "POST", "/api/v1/batch/photos/archive", `{"photos": 123}`)
 | |
| 		assert.Equal(t, http.StatusBadRequest, r.Code)
 | |
| 	})
 | |
| }
 | |
| 
 | |
| func TestBatchPhotosRestore(t *testing.T) {
 | |
| 	t.Run("successful request", func(t *testing.T) {
 | |
| 		app, router, conf := NewApiTest()
 | |
| 
 | |
| 		BatchPhotosArchive(router, conf)
 | |
| 		r2 := PerformRequestWithBody(app, "POST", "/api/v1/batch/photos/archive", `{"photos": ["pt9jtdre2lvl0yh8", "pt9jtdre2lvl0ycc"]}`)
 | |
| 		val2 := gjson.Get(r2.Body.String(), "message")
 | |
| 		assert.Contains(t, val2.String(), "photos archived")
 | |
| 		assert.Equal(t, http.StatusOK, r2.Code)
 | |
| 
 | |
| 		GetPhoto(router, conf)
 | |
| 		r3 := PerformRequest(app, "GET", "/api/v1/photos/pt9jtdre2lvl0yh8")
 | |
| 		assert.Equal(t, http.StatusOK, r3.Code)
 | |
| 		val3 := gjson.Get(r3.Body.String(), "DeletedAt")
 | |
| 		assert.NotEmpty(t, val3.String())
 | |
| 
 | |
| 		BatchPhotosRestore(router, conf)
 | |
| 		r := PerformRequestWithBody(app, "POST", "/api/v1/batch/photos/restore", `{"photos": ["pt9jtdre2lvl0yh8", "pt9jtdre2lvl0ycc"]}`)
 | |
| 		val := gjson.Get(r.Body.String(), "message")
 | |
| 		assert.Contains(t, val.String(), "photos restored")
 | |
| 		assert.Equal(t, http.StatusOK, r.Code)
 | |
| 
 | |
| 		r4 := PerformRequest(app, "GET", "/api/v1/photos/pt9jtdre2lvl0yh8")
 | |
| 		assert.Equal(t, http.StatusOK, r4.Code)
 | |
| 		val4 := gjson.Get(r4.Body.String(), "DeletedAt")
 | |
| 		assert.Empty(t, val4.String())
 | |
| 	})
 | |
| 	t.Run("no photos selected", func(t *testing.T) {
 | |
| 		app, router, conf := NewApiTest()
 | |
| 		BatchPhotosRestore(router, conf)
 | |
| 		r := PerformRequestWithBody(app, "POST", "/api/v1/batch/photos/restore", `{"photos": []}`)
 | |
| 		val := gjson.Get(r.Body.String(), "error")
 | |
| 		assert.Equal(t, "No photos selected", val.String())
 | |
| 		assert.Equal(t, http.StatusBadRequest, r.Code)
 | |
| 	})
 | |
| 	t.Run("invalid request", func(t *testing.T) {
 | |
| 		app, router, conf := NewApiTest()
 | |
| 		BatchPhotosRestore(router, conf)
 | |
| 		r := PerformRequestWithBody(app, "POST", "/api/v1/batch/photos/restore", `{"photos": 123}`)
 | |
| 		assert.Equal(t, http.StatusBadRequest, r.Code)
 | |
| 	})
 | |
| }
 | |
| 
 | |
| func TestBatchAlbumsDelete(t *testing.T) {
 | |
| 	app, router, conf := NewApiTest()
 | |
| 	CreateAlbum(router, conf)
 | |
| 	r := PerformRequestWithBody(app, "POST", "/api/v1/albums", `{"AlbumName": "BatchDelete", "AlbumDescription": "To be deleted", "AlbumNotes": "", "AlbumFavorite": true}`)
 | |
| 	assert.Equal(t, http.StatusOK, r.Code)
 | |
| 	uuid := gjson.Get(r.Body.String(), "AlbumUUID").String()
 | |
| 
 | |
| 	t.Run("successful request", func(t *testing.T) {
 | |
| 		app, router, conf := NewApiTest()
 | |
| 
 | |
| 		GetAlbum(router, conf)
 | |
| 		r := PerformRequest(app, "GET", "/api/v1/albums/"+uuid)
 | |
| 		val := gjson.Get(r.Body.String(), "AlbumSlug")
 | |
| 		assert.Equal(t, "batchdelete", val.String())
 | |
| 
 | |
| 		BatchAlbumsDelete(router, conf)
 | |
| 		r2 := PerformRequestWithBody(app, "POST", "/api/v1/batch/albums/delete", fmt.Sprintf(`{"albums": ["%s", "pt9jtdre2lvl0ycc"]}`, uuid))
 | |
| 		val2 := gjson.Get(r2.Body.String(), "message")
 | |
| 		assert.Contains(t, val2.String(), "albums deleted")
 | |
| 		assert.Equal(t, http.StatusOK, r2.Code)
 | |
| 
 | |
| 		r3 := PerformRequest(app, "GET", "/api/v1/albums/"+uuid)
 | |
| 		val3 := gjson.Get(r3.Body.String(), "error")
 | |
| 		assert.Equal(t, "Album not found", val3.String())
 | |
| 		assert.Equal(t, http.StatusNotFound, r3.Code)
 | |
| 	})
 | |
| 	t.Run("no albums selected", func(t *testing.T) {
 | |
| 		app, router, conf := NewApiTest()
 | |
| 		BatchAlbumsDelete(router, conf)
 | |
| 		r := PerformRequestWithBody(app, "POST", "/api/v1/batch/albums/delete", `{"albums": []}`)
 | |
| 		val := gjson.Get(r.Body.String(), "error")
 | |
| 		assert.Equal(t, "No albums selected", val.String())
 | |
| 		assert.Equal(t, http.StatusBadRequest, r.Code)
 | |
| 	})
 | |
| 	t.Run("invalid request", func(t *testing.T) {
 | |
| 		app, router, conf := NewApiTest()
 | |
| 		BatchAlbumsDelete(router, conf)
 | |
| 		r := PerformRequestWithBody(app, "POST", "/api/v1/batch/albums/delete", `{"albums": 123}`)
 | |
| 		assert.Equal(t, http.StatusBadRequest, r.Code)
 | |
| 	})
 | |
| }
 | |
| 
 | |
| func TestBatchPhotosPrivate(t *testing.T) {
 | |
| 	t.Run("successful request", func(t *testing.T) {
 | |
| 		app, router, conf := NewApiTest()
 | |
| 		GetPhoto(router, conf)
 | |
| 		r := PerformRequest(app, "GET", "/api/v1/photos/pt9jtdre2lvl0yh8")
 | |
| 		assert.Equal(t, http.StatusOK, r.Code)
 | |
| 		val := gjson.Get(r.Body.String(), "PhotoPrivate")
 | |
| 		assert.Equal(t, "false", val.String())
 | |
| 
 | |
| 		BatchPhotosPrivate(router, conf)
 | |
| 		r2 := PerformRequestWithBody(app, "POST", "/api/v1/batch/photos/private", `{"photos": ["pt9jtdre2lvl0yh8", "pt9jtdre2lvl0ycc"]}`)
 | |
| 		val2 := gjson.Get(r2.Body.String(), "message")
 | |
| 		assert.Contains(t, val2.String(), "photos marked as private")
 | |
| 		assert.Equal(t, http.StatusOK, r2.Code)
 | |
| 
 | |
| 		r3 := PerformRequest(app, "GET", "/api/v1/photos/pt9jtdre2lvl0yh8")
 | |
| 		assert.Equal(t, http.StatusOK, r3.Code)
 | |
| 		val3 := gjson.Get(r3.Body.String(), "PhotoPrivate")
 | |
| 		assert.Equal(t, "true", val3.String())
 | |
| 	})
 | |
| 	t.Run("no photos selected", func(t *testing.T) {
 | |
| 		app, router, conf := NewApiTest()
 | |
| 		BatchPhotosPrivate(router, conf)
 | |
| 		r := PerformRequestWithBody(app, "POST", "/api/v1/batch/photos/private", `{"photos": []}`)
 | |
| 		val := gjson.Get(r.Body.String(), "error")
 | |
| 		assert.Equal(t, "No photos selected", val.String())
 | |
| 		assert.Equal(t, http.StatusBadRequest, r.Code)
 | |
| 	})
 | |
| 	t.Run("invalid request", func(t *testing.T) {
 | |
| 		app, router, conf := NewApiTest()
 | |
| 		BatchPhotosPrivate(router, conf)
 | |
| 		r := PerformRequestWithBody(app, "POST", "/api/v1/batch/photos/private", `{"photos": 123}`)
 | |
| 		assert.Equal(t, http.StatusBadRequest, r.Code)
 | |
| 	})
 | |
| }
 | |
| 
 | |
| func TestBatchPhotosStory(t *testing.T) {
 | |
| 	t.Run("successful request", func(t *testing.T) {
 | |
| 		app, router, conf := NewApiTest()
 | |
| 		GetPhoto(router, conf)
 | |
| 		r := PerformRequest(app, "GET", "/api/v1/photos/pt9jtdre2lvl0yh8")
 | |
| 		assert.Equal(t, http.StatusOK, r.Code)
 | |
| 		val := gjson.Get(r.Body.String(), "PhotoStory")
 | |
| 		assert.Equal(t, "false", val.String())
 | |
| 
 | |
| 		BatchPhotosStory(router, conf)
 | |
| 		r2 := PerformRequestWithBody(app, "POST", "/api/v1/batch/photos/story", `{"photos": ["pt9jtdre2lvl0yh8", "pt9jtdre2lvl0ycc"]}`)
 | |
| 		val2 := gjson.Get(r2.Body.String(), "message")
 | |
| 		assert.Contains(t, val2.String(), "photos marked as story")
 | |
| 		assert.Equal(t, http.StatusOK, r2.Code)
 | |
| 
 | |
| 		r3 := PerformRequest(app, "GET", "/api/v1/photos/pt9jtdre2lvl0yh8")
 | |
| 		assert.Equal(t, http.StatusOK, r3.Code)
 | |
| 		val3 := gjson.Get(r3.Body.String(), "PhotoStory")
 | |
| 		assert.Equal(t, "true", val3.String())
 | |
| 	})
 | |
| 	t.Run("no photos selected", func(t *testing.T) {
 | |
| 		app, router, conf := NewApiTest()
 | |
| 		BatchPhotosStory(router, conf)
 | |
| 		r := PerformRequestWithBody(app, "POST", "/api/v1/batch/photos/story", `{"photos": []}`)
 | |
| 		val := gjson.Get(r.Body.String(), "error")
 | |
| 		assert.Equal(t, "No photos selected", val.String())
 | |
| 		assert.Equal(t, http.StatusBadRequest, r.Code)
 | |
| 	})
 | |
| 	t.Run("invalid request", func(t *testing.T) {
 | |
| 		app, router, conf := NewApiTest()
 | |
| 		BatchPhotosStory(router, conf)
 | |
| 		r := PerformRequestWithBody(app, "POST", "/api/v1/batch/photos/story", `{"photos": 123}`)
 | |
| 		assert.Equal(t, http.StatusBadRequest, r.Code)
 | |
| 	})
 | |
| }
 | |
| 
 | |
| func TestBatchLabelsDelete(t *testing.T) {
 | |
| 	t.Run("successful request", func(t *testing.T) {
 | |
| 		app, router, conf := NewApiTest()
 | |
| 		GetLabels(router, conf)
 | |
| 		r := PerformRequest(app, "GET", "/api/v1/labels?count=15")
 | |
| 		val := gjson.Get(r.Body.String(), `#(LabelName=="BatchDelete").LabelSlug`)
 | |
| 		assert.Equal(t, val.String(), "batchdelete")
 | |
| 
 | |
| 		BatchLabelsDelete(router, conf)
 | |
| 		r2 := PerformRequestWithBody(app, "POST", "/api/v1/batch/labels/delete", fmt.Sprintf(`{"labels": ["lt9k3pw1wowuy3c6", "pt9jtdre2lvl0ycc"]}`))
 | |
| 		val2 := gjson.Get(r2.Body.String(), "message")
 | |
| 		assert.Contains(t, val2.String(), "labels deleted")
 | |
| 		assert.Equal(t, http.StatusOK, r2.Code)
 | |
| 
 | |
| 		r3 := PerformRequest(app, "GET", "/api/v1/labels?count=15")
 | |
| 		val3 := gjson.Get(r3.Body.String(), `#(LabelName=="BatchDelete").LabelSlug`)
 | |
| 		assert.Equal(t, val3.String(), "")
 | |
| 	})
 | |
| 	t.Run("no labels selected", func(t *testing.T) {
 | |
| 		app, router, conf := NewApiTest()
 | |
| 		BatchLabelsDelete(router, conf)
 | |
| 		r := PerformRequestWithBody(app, "POST", "/api/v1/batch/labels/delete", `{"labels": []}`)
 | |
| 		val := gjson.Get(r.Body.String(), "error")
 | |
| 		assert.Equal(t, "No labels selected", val.String())
 | |
| 		assert.Equal(t, http.StatusBadRequest, r.Code)
 | |
| 	})
 | |
| 	t.Run("invalid request", func(t *testing.T) {
 | |
| 		app, router, conf := NewApiTest()
 | |
| 		BatchLabelsDelete(router, conf)
 | |
| 		r := PerformRequestWithBody(app, "POST", "/api/v1/batch/labels/delete", `{"labels": 123}`)
 | |
| 		assert.Equal(t, http.StatusBadRequest, r.Code)
 | |
| 	})
 | |
| }
 | 
