github.com/cloudreve/Cloudreve/v3@v3.0.0-20240224133659-3edb00a6484c/middleware/file_test.go (about)

     1  package middleware
     2  
     3  import (
     4  	"github.com/DATA-DOG/go-sqlmock"
     5  	"github.com/gin-gonic/gin"
     6  	"github.com/stretchr/testify/assert"
     7  	"net/http/httptest"
     8  	"testing"
     9  )
    10  
    11  func TestValidateSourceLink(t *testing.T) {
    12  	a := assert.New(t)
    13  	rec := httptest.NewRecorder()
    14  	testFunc := ValidateSourceLink()
    15  
    16  	// ID 不存在
    17  	{
    18  		c, _ := gin.CreateTestContext(rec)
    19  		testFunc(c)
    20  		a.True(c.IsAborted())
    21  	}
    22  
    23  	// SourceLink 不存在
    24  	{
    25  		c, _ := gin.CreateTestContext(rec)
    26  		c.Set("object_id", 1)
    27  		mock.ExpectQuery("SELECT(.+)source_links(.+)").WithArgs(1).WillReturnRows(sqlmock.NewRows([]string{"id"}))
    28  		testFunc(c)
    29  		a.True(c.IsAborted())
    30  		a.NoError(mock.ExpectationsWereMet())
    31  	}
    32  
    33  	// 原文件不存在
    34  	{
    35  		c, _ := gin.CreateTestContext(rec)
    36  		c.Set("object_id", 1)
    37  		mock.ExpectQuery("SELECT(.+)source_links(.+)").WithArgs(1).WillReturnRows(sqlmock.NewRows([]string{"id"}).AddRow(1))
    38  		mock.ExpectQuery("SELECT(.+)files(.+)").WithArgs(0).WillReturnRows(sqlmock.NewRows([]string{"id"}))
    39  		testFunc(c)
    40  		a.True(c.IsAborted())
    41  		a.NoError(mock.ExpectationsWereMet())
    42  	}
    43  
    44  	// 成功
    45  	{
    46  		c, _ := gin.CreateTestContext(rec)
    47  		c.Set("object_id", 1)
    48  		mock.ExpectQuery("SELECT(.+)source_links(.+)").WithArgs(1).WillReturnRows(sqlmock.NewRows([]string{"id", "file_id"}).AddRow(1, 2))
    49  		mock.ExpectQuery("SELECT(.+)files(.+)").WithArgs(2).WillReturnRows(sqlmock.NewRows([]string{"id"}).AddRow(2))
    50  		mock.ExpectBegin()
    51  		mock.ExpectExec("UPDATE(.+)source_links").WillReturnResult(sqlmock.NewResult(1, 1))
    52  		testFunc(c)
    53  		a.False(c.IsAborted())
    54  		a.NoError(mock.ExpectationsWereMet())
    55  	}
    56  
    57  }