Remove unused variables / code (#7736)
* remove unused variables / code * fix bug in testPostStoreGetOldest
Этот коммит содержится в:
@@ -32,7 +32,6 @@ type Context struct {
|
|||||||
T goi18n.TranslateFunc
|
T goi18n.TranslateFunc
|
||||||
Locale string
|
Locale string
|
||||||
TeamId string
|
TeamId string
|
||||||
isSystemAdmin bool
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *API) ApiAppHandler(h func(*Context, http.ResponseWriter, *http.Request)) http.Handler {
|
func (api *API) ApiAppHandler(h func(*Context, http.ResponseWriter, *http.Request)) http.Handler {
|
||||||
|
|||||||
@@ -192,10 +192,6 @@ func getEmojiImage(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
w.Write(image)
|
w.Write(image)
|
||||||
}
|
}
|
||||||
|
|
||||||
func getEmojiImagePath(id string) string {
|
|
||||||
return "emoji/" + id + "/image"
|
|
||||||
}
|
|
||||||
|
|
||||||
func resizeEmoji(img image.Image, width int, height int) image.Image {
|
func resizeEmoji(img image.Image, width int, height int) image.Image {
|
||||||
emojiWidth := float64(width)
|
emojiWidth := float64(width)
|
||||||
emojiHeight := float64(height)
|
emojiHeight := float64(height)
|
||||||
|
|||||||
@@ -1,45 +0,0 @@
|
|||||||
// Copyright (c) 2017-present Mattermost, Inc. All Rights Reserved.
|
|
||||||
// See License.txt for license information.
|
|
||||||
|
|
||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"bytes"
|
|
||||||
"strings"
|
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
|
||||||
"github.com/spf13/pflag"
|
|
||||||
)
|
|
||||||
|
|
||||||
func runCommand(argString string) error {
|
|
||||||
err, _ := runCommandWithOutput(argString)
|
|
||||||
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
func runCommandWithOutput(argString string) (error, string) {
|
|
||||||
// Set arguments on the root command
|
|
||||||
rootCmd.SetArgs(strings.Split(argString, " "))
|
|
||||||
defer rootCmd.SetArgs([]string{})
|
|
||||||
|
|
||||||
output := new(bytes.Buffer)
|
|
||||||
rootCmd.SetOutput(output)
|
|
||||||
defer rootCmd.SetOutput(nil)
|
|
||||||
|
|
||||||
// Executing the root command will call the necessary subcommand
|
|
||||||
cmd, err := rootCmd.ExecuteC()
|
|
||||||
|
|
||||||
// And clear the arguments on the subcommand that was actually called since they'd otherwise
|
|
||||||
// be used on the next call to this command
|
|
||||||
clearArgs(cmd)
|
|
||||||
|
|
||||||
return err, output.String()
|
|
||||||
}
|
|
||||||
|
|
||||||
func clearArgs(command *cobra.Command) {
|
|
||||||
command.Flags().VisitAll(clearFlag)
|
|
||||||
}
|
|
||||||
|
|
||||||
func clearFlag(flag *pflag.Flag) {
|
|
||||||
flag.Value.Set(flag.DefValue)
|
|
||||||
}
|
|
||||||
@@ -11,22 +11,10 @@ func CommandPrintln(a ...interface{}) (int, error) {
|
|||||||
return fmt.Println(a...)
|
return fmt.Println(a...)
|
||||||
}
|
}
|
||||||
|
|
||||||
func CommandPrint(a ...interface{}) (int, error) {
|
|
||||||
return fmt.Print(a...)
|
|
||||||
}
|
|
||||||
|
|
||||||
func CommandPrintErrorln(a ...interface{}) (int, error) {
|
func CommandPrintErrorln(a ...interface{}) (int, error) {
|
||||||
return fmt.Fprintln(os.Stderr, a...)
|
return fmt.Fprintln(os.Stderr, a...)
|
||||||
}
|
}
|
||||||
|
|
||||||
func CommandPrintError(a ...interface{}) (int, error) {
|
|
||||||
return fmt.Fprint(os.Stderr, a...)
|
|
||||||
}
|
|
||||||
|
|
||||||
func CommandPrettyPrintln(a ...interface{}) (int, error) {
|
func CommandPrettyPrintln(a ...interface{}) (int, error) {
|
||||||
return fmt.Fprintln(os.Stderr, a...)
|
return fmt.Fprintln(os.Stderr, a...)
|
||||||
}
|
}
|
||||||
|
|
||||||
func CommandPrettyPrint(a ...interface{}) (int, error) {
|
|
||||||
return fmt.Fprint(os.Stderr, a...)
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -586,10 +586,6 @@ func (o *Config) GetSSOService(service string) *SSOSettings {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (o *Config) getClientRequirementsFromConfig() ClientRequirements {
|
|
||||||
return o.ClientRequirements
|
|
||||||
}
|
|
||||||
|
|
||||||
func ConfigFromJson(data io.Reader) *Config {
|
func ConfigFromJson(data io.Reader) *Config {
|
||||||
decoder := json.NewDecoder(data)
|
decoder := json.NewDecoder(data)
|
||||||
var o Config
|
var o Config
|
||||||
|
|||||||
@@ -223,7 +223,6 @@ type muxerStream struct {
|
|||||||
readWake *sync.Cond
|
readWake *sync.Cond
|
||||||
isClosed bool
|
isClosed bool
|
||||||
remoteClosed bool
|
remoteClosed bool
|
||||||
closeErr error
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *muxerStream) Read(p []byte) (int, error) {
|
func (s *muxerStream) Read(p []byte) (int, error) {
|
||||||
|
|||||||
@@ -18,14 +18,3 @@ func hintsContains(hints []LayeredStoreHint, contains LayeredStoreHint) bool {
|
|||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
func hintsContainsAny(hints []LayeredStoreHint, contains ...LayeredStoreHint) bool {
|
|
||||||
for _, hint := range hints {
|
|
||||||
for _, hint2 := range contains {
|
|
||||||
if hint == hint2 {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -420,11 +420,6 @@ func (s SqlChannelStore) PermanentDeleteMembersByChannel(channelId string) store
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
type channelWithMember struct {
|
|
||||||
model.Channel
|
|
||||||
model.ChannelMember
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s SqlChannelStore) GetChannels(teamId string, userId string) store.StoreChannel {
|
func (s SqlChannelStore) GetChannels(teamId string, userId string) store.StoreChannel {
|
||||||
return store.Do(func(result *store.StoreResult) {
|
return store.Do(func(result *store.StoreResult) {
|
||||||
data := &model.ChannelList{}
|
data := &model.ChannelList{}
|
||||||
|
|||||||
@@ -41,6 +41,7 @@ func TestPostStore(t *testing.T, ss store.Store) {
|
|||||||
t.Run("GetPostsByIds", func(t *testing.T) { testPostStoreGetPostsByIds(t, ss) })
|
t.Run("GetPostsByIds", func(t *testing.T) { testPostStoreGetPostsByIds(t, ss) })
|
||||||
t.Run("GetPostsBatchForIndexing", func(t *testing.T) { testPostStoreGetPostsBatchForIndexing(t, ss) })
|
t.Run("GetPostsBatchForIndexing", func(t *testing.T) { testPostStoreGetPostsBatchForIndexing(t, ss) })
|
||||||
t.Run("PermanentDeleteBatch", func(t *testing.T) { testPostStorePermanentDeleteBatch(t, ss) })
|
t.Run("PermanentDeleteBatch", func(t *testing.T) { testPostStorePermanentDeleteBatch(t, ss) })
|
||||||
|
t.Run("GetOldest", func(t *testing.T) { testPostStoreGetOldest(t, ss) })
|
||||||
}
|
}
|
||||||
|
|
||||||
func testPostStoreSave(t *testing.T, ss store.Store) {
|
func testPostStoreSave(t *testing.T, ss store.Store) {
|
||||||
@@ -1700,7 +1701,6 @@ func testPostStoreGetOldest(t *testing.T, ss store.Store) {
|
|||||||
o1 = (<-ss.Post().Save(o1)).Data.(*model.Post)
|
o1 = (<-ss.Post().Save(o1)).Data.(*model.Post)
|
||||||
|
|
||||||
o2 := &model.Post{}
|
o2 := &model.Post{}
|
||||||
o2.Id = model.NewId()
|
|
||||||
o2.ChannelId = o1.ChannelId
|
o2.ChannelId = o1.ChannelId
|
||||||
o2.UserId = model.NewId()
|
o2.UserId = model.NewId()
|
||||||
o2.Message = "zz" + model.NewId() + "b"
|
o2.Message = "zz" + model.NewId() + "b"
|
||||||
|
|||||||
@@ -28,15 +28,14 @@ var infoLog = l4g.Info
|
|||||||
var errorLog = l4g.Error
|
var errorLog = l4g.Error
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
|
// listens for configuration changes that we might need to respond to
|
||||||
|
utils.AddConfigListener(func(oldConfig *model.Config, newConfig *model.Config) {
|
||||||
|
infoLog("Configuration change detected, reloading log settings")
|
||||||
|
initL4g(newConfig.LogSettings)
|
||||||
|
})
|
||||||
initL4g(utils.Cfg.LogSettings)
|
initL4g(utils.Cfg.LogSettings)
|
||||||
}
|
}
|
||||||
|
|
||||||
// listens for configuration changes that we might need to respond to
|
|
||||||
var configListenerID = utils.AddConfigListener(func(oldConfig *model.Config, newConfig *model.Config) {
|
|
||||||
infoLog("Configuration change detected, reloading log settings")
|
|
||||||
initL4g(newConfig.LogSettings)
|
|
||||||
})
|
|
||||||
|
|
||||||
// assumes that ../config.go::configureLog has already been called, and has in turn called l4g.close() to clean up
|
// assumes that ../config.go::configureLog has already been called, and has in turn called l4g.close() to clean up
|
||||||
// any old filters that we might have previously created
|
// any old filters that we might have previously created
|
||||||
func initL4g(logSettings model.LogSettings) {
|
func initL4g(logSettings model.LogSettings) {
|
||||||
|
|||||||
@@ -1,281 +0,0 @@
|
|||||||
// this is a new logger interface for mattermost
|
|
||||||
|
|
||||||
package logger
|
|
||||||
|
|
||||||
type LogMessage struct {
|
|
||||||
Context map[string]string
|
|
||||||
File string
|
|
||||||
Message string
|
|
||||||
}
|
|
||||||
|
|
||||||
const validPath = `^utils/([a-z_]+/)*logger_test.go$`
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
Broken because code somehow depends on path
|
|
||||||
|
|
||||||
// ensures that the relative path of the file that called into the logger is returned
|
|
||||||
func TestGetCallerFilename(t *testing.T) {
|
|
||||||
filename, _ := getCallerFilename()
|
|
||||||
fmt.Println("Thing: " + filename)
|
|
||||||
matched, err := regexp.MatchString(validPath, filename)
|
|
||||||
require.NoError(t, err)
|
|
||||||
assert.True(t, matched)
|
|
||||||
}
|
|
||||||
|
|
||||||
// ensures that values can be recorded on a Context object, and that the data in question is serialized as a part of the log message
|
|
||||||
func TestSerializeContext(t *testing.T) {
|
|
||||||
ctx := context.Background()
|
|
||||||
|
|
||||||
expectedUserId := "some-fake-user-id"
|
|
||||||
ctx = WithUserId(ctx, expectedUserId)
|
|
||||||
|
|
||||||
expectedRequestId := "some-fake-request-id"
|
|
||||||
ctx = WithRequestId(ctx, expectedRequestId)
|
|
||||||
|
|
||||||
serialized := serializeContext(ctx)
|
|
||||||
|
|
||||||
assert.Equal(t, map[string]string{
|
|
||||||
"user_id": expectedUserId,
|
|
||||||
"request_id": expectedRequestId,
|
|
||||||
}, serialized)
|
|
||||||
}
|
|
||||||
|
|
||||||
// ensures that an entire log message with an empty context can be properly serialized into a JSON object
|
|
||||||
func TestSerializeLogMessageEmptyContext(t *testing.T) {
|
|
||||||
emptyContext := context.Background()
|
|
||||||
|
|
||||||
var logMessage = "This is a log message"
|
|
||||||
var serialized = serializeLogMessage(emptyContext, logMessage)
|
|
||||||
|
|
||||||
var deserialized LogMessage
|
|
||||||
json.Unmarshal([]byte(serialized), &deserialized)
|
|
||||||
|
|
||||||
assert.Empty(t, deserialized.Context)
|
|
||||||
assert.Equal(t, logMessage, deserialized.Message)
|
|
||||||
matched, err := regexp.MatchString(validPath, deserialized.File)
|
|
||||||
require.NoError(t, err)
|
|
||||||
assert.True(t, matched)
|
|
||||||
}
|
|
||||||
|
|
||||||
// ensures that an entire log message with a populated context can be properly serialized into a JSON object
|
|
||||||
func TestSerializeLogMessagePopulatedContext(t *testing.T) {
|
|
||||||
populatedContext := context.Background()
|
|
||||||
|
|
||||||
populatedContext = WithRequestId(populatedContext, "foo")
|
|
||||||
populatedContext = WithUserId(populatedContext, "bar")
|
|
||||||
|
|
||||||
var logMessage = "This is a log message"
|
|
||||||
var serialized = serializeLogMessage(populatedContext, logMessage)
|
|
||||||
|
|
||||||
var deserialized LogMessage
|
|
||||||
json.Unmarshal([]byte(serialized), &deserialized)
|
|
||||||
|
|
||||||
assert.Equal(t, map[string]string{
|
|
||||||
"request_id": "foo",
|
|
||||||
"user_id": "bar",
|
|
||||||
}, deserialized.Context)
|
|
||||||
assert.Equal(t, logMessage, deserialized.Message)
|
|
||||||
matched, err := regexp.MatchString(validPath, deserialized.File)
|
|
||||||
require.NoError(t, err)
|
|
||||||
assert.True(t, matched)
|
|
||||||
}
|
|
||||||
|
|
||||||
// ensures that a debugLog message is passed through to the underlying logger as expected
|
|
||||||
func TestDebugc(t *testing.T) {
|
|
||||||
// inject a "mocked" debugLog method that captures the first argument that is passed to it
|
|
||||||
var capture string
|
|
||||||
oldDebug := debugLog
|
|
||||||
defer func() { debugLog = oldDebug }()
|
|
||||||
type WrapperType func() string
|
|
||||||
debugLog = func(format interface{}, args ...interface{}) {
|
|
||||||
// the code that we're testing passes a closure to the debugLog method, so we have to execute it to get the actual message back
|
|
||||||
if f, ok := format.(func() string); ok {
|
|
||||||
capture = WrapperType(f)()
|
|
||||||
} else {
|
|
||||||
t.Error("First parameter passed to Debug is not a closure")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// log something
|
|
||||||
emptyContext := context.Background()
|
|
||||||
var logMessage = "Some log message"
|
|
||||||
Debugc(emptyContext, logMessage)
|
|
||||||
|
|
||||||
// check to see that the message is logged to the underlying log system, in this case our mock method
|
|
||||||
var deserialized LogMessage
|
|
||||||
json.Unmarshal([]byte(capture), &deserialized)
|
|
||||||
|
|
||||||
assert.Empty(t, deserialized.Context)
|
|
||||||
assert.Equal(t, logMessage, deserialized.Message)
|
|
||||||
matched, err := regexp.MatchString(validPath, deserialized.File)
|
|
||||||
require.NoError(t, err)
|
|
||||||
assert.True(t, matched)
|
|
||||||
}
|
|
||||||
|
|
||||||
// ensures that a debugLog message is passed through to the underlying logger as expected
|
|
||||||
func TestDebugf(t *testing.T) {
|
|
||||||
// inject a "mocked" debugLog method that captures the first argument that is passed to it
|
|
||||||
var capture string
|
|
||||||
oldDebug := debugLog
|
|
||||||
defer func() { debugLog = oldDebug }()
|
|
||||||
type WrapperType func() string
|
|
||||||
debugLog = func(format interface{}, args ...interface{}) {
|
|
||||||
// the code that we're testing passes a closure to the debugLog method, so we have to execute it to get the actual message back
|
|
||||||
if f, ok := format.(func() string); ok {
|
|
||||||
capture = WrapperType(f)()
|
|
||||||
} else {
|
|
||||||
t.Error("First parameter passed to Debug is not a closure")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// log something
|
|
||||||
formatString := "Some %v message"
|
|
||||||
param := "log"
|
|
||||||
Debugf(formatString, param)
|
|
||||||
|
|
||||||
// check to see that the message is logged to the underlying log system, in this case our mock method
|
|
||||||
var deserialized LogMessage
|
|
||||||
json.Unmarshal([]byte(capture), &deserialized)
|
|
||||||
|
|
||||||
assert.Empty(t, deserialized.Context)
|
|
||||||
assert.Equal(t, fmt.Sprintf(formatString, param), deserialized.Message)
|
|
||||||
matched, err := regexp.MatchString(validPath, deserialized.File)
|
|
||||||
require.NoError(t, err)
|
|
||||||
assert.True(t, matched)
|
|
||||||
}
|
|
||||||
|
|
||||||
// ensures that an infoLog message is passed through to the underlying logger as expected
|
|
||||||
func TestInfoc(t *testing.T) {
|
|
||||||
// inject a "mocked" infoLog method that captures the first argument that is passed to it
|
|
||||||
var capture string
|
|
||||||
oldInfo := infoLog
|
|
||||||
defer func() { infoLog = oldInfo }()
|
|
||||||
type WrapperType func() string
|
|
||||||
infoLog = func(format interface{}, args ...interface{}) {
|
|
||||||
// the code that we're testing passes a closure to the infoLog method, so we have to execute it to get the actual message back
|
|
||||||
if f, ok := format.(func() string); ok {
|
|
||||||
capture = WrapperType(f)()
|
|
||||||
} else {
|
|
||||||
t.Error("First parameter passed to Info is not a closure")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// log something
|
|
||||||
emptyContext := context.Background()
|
|
||||||
var logMessage = "Some log message"
|
|
||||||
Infoc(emptyContext, logMessage)
|
|
||||||
|
|
||||||
// check to see that the message is logged to the underlying log system, in this case our mock method
|
|
||||||
var deserialized LogMessage
|
|
||||||
json.Unmarshal([]byte(capture), &deserialized)
|
|
||||||
|
|
||||||
assert.Empty(t, deserialized.Context)
|
|
||||||
assert.Equal(t, logMessage, deserialized.Message)
|
|
||||||
matched, err := regexp.MatchString(validPath, deserialized.File)
|
|
||||||
require.NoError(t, err)
|
|
||||||
assert.True(t, matched)
|
|
||||||
}
|
|
||||||
|
|
||||||
// ensures that an infoLog message is passed through to the underlying logger as expected
|
|
||||||
func TestInfof(t *testing.T) {
|
|
||||||
// inject a "mocked" infoLog method that captures the first argument that is passed to it
|
|
||||||
var capture string
|
|
||||||
oldInfo := infoLog
|
|
||||||
defer func() { infoLog = oldInfo }()
|
|
||||||
type WrapperType func() string
|
|
||||||
infoLog = func(format interface{}, args ...interface{}) {
|
|
||||||
// the code that we're testing passes a closure to the infoLog method, so we have to execute it to get the actual message back
|
|
||||||
if f, ok := format.(func() string); ok {
|
|
||||||
capture = WrapperType(f)()
|
|
||||||
} else {
|
|
||||||
t.Error("First parameter passed to Info is not a closure")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// log something
|
|
||||||
format := "Some %v message"
|
|
||||||
param := "log"
|
|
||||||
Infof(format, param)
|
|
||||||
|
|
||||||
// check to see that the message is logged to the underlying log system, in this case our mock method
|
|
||||||
var deserialized LogMessage
|
|
||||||
json.Unmarshal([]byte(capture), &deserialized)
|
|
||||||
|
|
||||||
assert.Empty(t, deserialized.Context)
|
|
||||||
assert.Equal(t, fmt.Sprintf(format, param), deserialized.Message)
|
|
||||||
matched, err := regexp.MatchString(validPath, deserialized.File)
|
|
||||||
require.NoError(t, err)
|
|
||||||
assert.True(t, matched)
|
|
||||||
}
|
|
||||||
|
|
||||||
// ensures that an error message is passed through to the underlying logger as expected
|
|
||||||
func TestErrorc(t *testing.T) {
|
|
||||||
// inject a "mocked" err method that captures the first argument that is passed to it
|
|
||||||
var capture string
|
|
||||||
oldError := errorLog
|
|
||||||
defer func() { errorLog = oldError }()
|
|
||||||
type WrapperType func() string
|
|
||||||
errorLog = func(format interface{}, args ...interface{}) error {
|
|
||||||
// the code that we're testing passes a closure to the err method, so we have to execute it to get the actual message back
|
|
||||||
if f, ok := format.(func() string); ok {
|
|
||||||
capture = WrapperType(f)()
|
|
||||||
} else {
|
|
||||||
t.Error("First parameter passed to Error is not a closure")
|
|
||||||
}
|
|
||||||
|
|
||||||
// the code under test doesn't care about this return value
|
|
||||||
return errors.New(capture)
|
|
||||||
}
|
|
||||||
|
|
||||||
// log something
|
|
||||||
emptyContext := context.Background()
|
|
||||||
var logMessage = "Some log message"
|
|
||||||
Errorc(emptyContext, logMessage)
|
|
||||||
|
|
||||||
// check to see that the message is logged to the underlying log system, in this case our mock method
|
|
||||||
var deserialized LogMessage
|
|
||||||
json.Unmarshal([]byte(capture), &deserialized)
|
|
||||||
|
|
||||||
assert.Empty(t, deserialized.Context)
|
|
||||||
assert.Equal(t, logMessage, deserialized.Message)
|
|
||||||
matched, err := regexp.MatchString(validPath, deserialized.File)
|
|
||||||
require.NoError(t, err)
|
|
||||||
assert.True(t, matched)
|
|
||||||
}
|
|
||||||
|
|
||||||
// ensures that an error message is passed through to the underlying logger as expected
|
|
||||||
func TestErrorf(t *testing.T) {
|
|
||||||
// inject a "mocked" err method that captures the first argument that is passed to it
|
|
||||||
var capture string
|
|
||||||
oldError := errorLog
|
|
||||||
defer func() { errorLog = oldError }()
|
|
||||||
type WrapperType func() string
|
|
||||||
errorLog = func(format interface{}, args ...interface{}) error {
|
|
||||||
// the code that we're testing passes a closure to the err method, so we have to execute it to get the actual message back
|
|
||||||
if f, ok := format.(func() string); ok {
|
|
||||||
capture = WrapperType(f)()
|
|
||||||
} else {
|
|
||||||
t.Error("First parameter passed to Error is not a closure")
|
|
||||||
}
|
|
||||||
|
|
||||||
// the code under test doesn't care about this return value
|
|
||||||
return errors.New(capture)
|
|
||||||
}
|
|
||||||
|
|
||||||
// log something
|
|
||||||
format := "Some %v message"
|
|
||||||
param := "log"
|
|
||||||
Errorf(format, param)
|
|
||||||
|
|
||||||
// check to see that the message is logged to the underlying log system, in this case our mock method
|
|
||||||
var deserialized LogMessage
|
|
||||||
json.Unmarshal([]byte(capture), &deserialized)
|
|
||||||
|
|
||||||
assert.Empty(t, deserialized.Context)
|
|
||||||
assert.Equal(t, fmt.Sprintf(format, param), deserialized.Message)
|
|
||||||
matched, err := regexp.MatchString(validPath, deserialized.File)
|
|
||||||
require.NoError(t, err)
|
|
||||||
assert.True(t, matched)
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
Ссылка в новой задаче
Block a user