Skip to content

Commit efc1e62

Browse files
committed
Add GetLastStateChange function
1 parent 4015a3e commit efc1e62

File tree

2 files changed

+43
-0
lines changed

2 files changed

+43
-0
lines changed

state_change_log.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,20 @@ func GetStateChangeLogs(model interface{}, db *gorm.DB) []StateChangeLog {
4848
return changelogs
4949
}
5050

51+
// GetLastStateChange gets last state change
52+
func GetLastStateChange(model interface{}, db *gorm.DB) *StateChangeLog {
53+
var (
54+
changelog StateChangeLog
55+
scope = db.NewScope(model)
56+
)
57+
58+
db.Where("refer_table = ? AND refer_id = ?", scope.TableName(), GenerateReferenceKey(model, db)).Last(&changelog)
59+
if changelog.To == "" {
60+
return nil
61+
}
62+
return &changelog
63+
}
64+
5165
// ConfigureQorResource used to configure transition for qor admin
5266
func (stageChangeLog *StateChangeLog) ConfigureQorResource(res resource.Resourcer) {
5367
if res, ok := res.(*admin.Resource); ok {

transition_test.go

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,35 @@ func TestStateTransition(t *testing.T) {
8787
}
8888
}
8989

90+
func TestGetLastStateChange(t *testing.T) {
91+
order := &Order{}
92+
93+
if err := getStateMachine().Trigger("checkout", order, db, "checkout note"); err != nil {
94+
t.Errorf("should not raise any error when trigger event checkout")
95+
}
96+
97+
if err := getStateMachine().Trigger("pay", order, db, "pay note"); err != nil {
98+
t.Errorf("should not raise any error when trigger event checkout")
99+
}
100+
101+
if order.GetState() != "paid" {
102+
t.Errorf("state doesn't changed to paid")
103+
}
104+
105+
var lastStateChange = transition.GetLastStateChange(order, db)
106+
if lastStateChange.To != "paid" {
107+
t.Errorf("state to not set")
108+
} else {
109+
if lastStateChange.From != "checkout" {
110+
t.Errorf("state from not set")
111+
}
112+
113+
if lastStateChange.Note != "pay note" {
114+
t.Errorf("state note not set")
115+
}
116+
}
117+
}
118+
90119
func TestMultipleTransitionWithOneEvent(t *testing.T) {
91120
orderStateMachine := getStateMachine()
92121
cancellEvent := orderStateMachine.Event("cancel")

0 commit comments

Comments
 (0)