github.com/erda-project/erda-infra@v1.0.9/providers/mysql/v2/plugins/fields/soft_delete_stamp_test.go (about)

     1  // Copyright (c) 2021 Terminus, Inc.
     2  //
     3  // Licensed under the Apache License, Version 2.0 (the "License");
     4  // you may not use this file except in compliance with the License.
     5  // You may obtain a copy of the License at
     6  //
     7  //      http://www.apache.org/licenses/LICENSE-2.0
     8  //
     9  // Unless required by applicable law or agreed to in writing, software
    10  // distributed under the License is distributed on an "AS IS" BASIS,
    11  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    12  // See the License for the specific language governing permissions and
    13  // limitations under the License.
    14  
    15  package fields_test
    16  
    17  //import (
    18  //	"errors"
    19  //	"os"
    20  //	"path/filepath"
    21  //	"regexp"
    22  //	"testing"
    23  //
    24  //	"gorm.io/driver/sqlite"
    25  //	"gorm.io/gorm"
    26  //
    27  //	"github.com/erda-project/erda-infra/providers/mysql/v2/plugins/fields"
    28  //)
    29  //
    30  //type User2 struct {
    31  //	ID        uint
    32  //	Name      string
    33  //	Age       uint
    34  //	DeletedAt fields.DeletedAtStamp
    35  //}
    36  //
    37  //func TestDeletedAtStamp(t *testing.T) {
    38  //	dsn := filepath.Join(os.TempDir(), "gorm.db")
    39  //	db, err := gorm.Open(sqlite.Open(dsn), &gorm.Config{})
    40  //	if err != nil {
    41  //		t.Fatalf("failed to connect to database: %v", err)
    42  //	}
    43  //	defer os.Remove(dsn)
    44  //	db = db.Debug()
    45  //
    46  //	user := User2{Name: "dspo", Age: 20}
    47  //	t.Log("drop table")
    48  //	if err = db.Migrator().DropTable(new(User2)); err != nil {
    49  //		t.Fatalf("failed to drop table: %v", err)
    50  //	}
    51  //	t.Log("auto migrate")
    52  //	if err = db.AutoMigrate(new(User2)); err != nil {
    53  //		t.Fatalf("failed to auto migrate: %v", err)
    54  //	}
    55  //	t.Log("save user")
    56  //	db.Save(&user)
    57  //
    58  //	var count int64
    59  //	var age uint
    60  //
    61  //	t.Log("count")
    62  //	if db.Model(&User2{}).Where("name = ?", user.Name).Count(&count).Error != nil || count != 1 {
    63  //		t.Errorf("count soft deleted record, expects: %v, got: %v", 1, count)
    64  //	}
    65  //
    66  //	t.Log("select")
    67  //	if db.Model(&User2{}).Select("age").Where("name = ?", user.Name).Scan(&age).Error != nil || age != user.Age {
    68  //		t.Errorf("age soft deleted record, expects: %v, got: %v", user.Age, age)
    69  //	}
    70  //
    71  //	t.Log("delete")
    72  //	if err := db.Delete(&user).Error; err != nil {
    73  //		t.Fatalf("no error should be happen when soft delte user, but got: %v", err)
    74  //	}
    75  //
    76  //	if user.DeletedAt.Int64 == 0 {
    77  //		t.Errorf("user's deleted at shoud be zero, bug got: %v", user.DeletedAt)
    78  //	}
    79  //
    80  //	t.Log("dry run delete")
    81  //	sql := db.Session(&gorm.Session{DryRun: true}).Delete(&user).Statement.SQL.String()
    82  //	if !regexp.MustCompile(`UPDATE .user2. SET .deleted_at.=.* WHERE .user2.\..id. = .* AND \(.user2.\..deleted_at. = \? OR .user2.\..deleted_at. IS NULL\)`).MatchString(sql) {
    83  //		t.Fatalf("invalid sql generated, got %v", sql)
    84  //	}
    85  //
    86  //	t.Log("first")
    87  //	if db.First(&User2{}, "name = ?", user.Name).Error == nil {
    88  //		t.Errorf("can not find a soft deleted record")
    89  //	}
    90  //
    91  //	count = 0
    92  //	t.Log("count")
    93  //	if db.Model(&User2{}).Where("name = ?", user.Name).Count(&count).Error != nil || count != 0 {
    94  //		t.Errorf("count soft deleted record, expects: %v, got: %v", 0, count)
    95  //	}
    96  //
    97  //	age = 0
    98  //	t.Log("select age")
    99  //	if err := db.Model(&User2{}).Select("age").Where("name = ?", user.Name).Scan(&age).Error; err != nil || age != 0 {
   100  //		t.Fatalf("age soft deleted record, expects: %v, got: %v, err: %v", 0, age, err)
   101  //	}
   102  //
   103  //	t.Log("unscoped first")
   104  //	if err := db.Unscoped().First(&User2{}, "name = ?", user.Name).Error; err != nil {
   105  //		t.Errorf("should find soft deleted record with Unscoped, but got err: %v", err)
   106  //	}
   107  //
   108  //	t.Log("unscoped delete")
   109  //	db.Unscoped().Delete(&user)
   110  //	t.Log("unscoped first")
   111  //	if err := db.Unscoped().First(&User2{}, "name = ?", user.Name).Error; !errors.Is(err, gorm.ErrRecordNotFound) {
   112  //		t.Errorf("can not permanently deleted record")
   113  //	}
   114  //}