Added some new test cases to catch more things and to see if the statistics on Code Climate change.

Added more TODO ideas for changes.
Removed an unused field from LanguagePack.
This commit is contained in:
Azareal 2018-07-31 14:02:09 +10:00
parent d0e7b1c982
commit 8e81f922ea
5 changed files with 33 additions and 14 deletions

View File

@ -2,11 +2,6 @@ package counters
import "sync" import "sync"
type RWMutexCounterBucket struct {
counter int
sync.RWMutex
}
// TODO: Make a neater API for this // TODO: Make a neater API for this
var routeMapEnum map[string]int var routeMapEnum map[string]int
var reverseRouteMapEnum map[int]string var reverseRouteMapEnum map[int]string
@ -40,3 +35,8 @@ func SetOSMapEnum(osme map[string]int) {
func SetReverseOSMapEnum(rosme map[int]string) { func SetReverseOSMapEnum(rosme map[int]string) {
reverseOSMapEnum = rosme reverseOSMapEnum = rosme
} }
type RWMutexCounterBucket struct {
counter int
sync.RWMutex
}

View File

@ -1,7 +1,7 @@
/* /*
* *
* Gosora Plugin System * Gosora Plugin System
* Copyright Azareal 2016 - 2018 * Copyright Azareal 2016 - 2019
* *
*/ */
package common package common
@ -410,6 +410,8 @@ func (plugin *Plugin) RemoveHook(name string, handler interface{}) {
delete(plugin.Hooks, name) delete(plugin.Hooks, name)
} }
// TODO: Add a HasHook method to complete the AddHook, RemoveHook, etc. set?
var PluginsInited = false var PluginsInited = false
func InitPlugins() { func InitPlugins() {

View File

@ -35,8 +35,8 @@ type LevelPhrases struct {
// ! For the sake of thread safety, you must never modify a *LanguagePack directly, but to create a copy of it and overwrite the entry in the sync.Map // ! For the sake of thread safety, you must never modify a *LanguagePack directly, but to create a copy of it and overwrite the entry in the sync.Map
type LanguagePack struct { type LanguagePack struct {
Name string Name string
Phrases map[string]string // Should we use a sync map or a struct for these? It would be nice, if we could keep all the phrases consistent. // Should we use a sync map or a struct for these? It would be nice, if we could keep all the phrases consistent.
Levels LevelPhrases Levels LevelPhrases
GlobalPerms map[string]string GlobalPerms map[string]string
LocalPerms map[string]string LocalPerms map[string]string
@ -140,11 +140,7 @@ func SaveLangPack(langPack *LanguagePack) error {
return nil return nil
} }
func GetPhrase(name string) (string, bool) { // TODO: Merge these two maps?
res, ok := currentLangPack.Load().(*LanguagePack).Phrases[name]
return res, ok
}
func GetGlobalPermPhrase(name string) string { func GetGlobalPermPhrase(name string) string {
res, ok := currentLangPack.Load().(*LanguagePack).GlobalPerms[name] res, ok := currentLangPack.Load().(*LanguagePack).GlobalPerms[name]
if !ok { if !ok {
@ -152,7 +148,6 @@ func GetGlobalPermPhrase(name string) string {
} }
return res return res
} }
func GetLocalPermPhrase(name string) string { func GetLocalPermPhrase(name string) string {
res, ok := currentLangPack.Load().(*LanguagePack).LocalPerms[name] res, ok := currentLangPack.Load().(*LanguagePack).LocalPerms[name]
if !ok { if !ok {

View File

@ -957,6 +957,27 @@ func TestPluginManager(t *testing.T) {
expectNilErr(t, plugin2.SetActive(false)) expectNilErr(t, plugin2.SetActive(false))
plugin.Deactivate() plugin.Deactivate()
expectNilErr(t, plugin.SetActive(false)) expectNilErr(t, plugin.SetActive(false))
// Hook tests
expect(t, common.RunSshook("haha", "ho") == "ho", "Sshook shouldn't have anything bound to it yet")
var handle = func(in string) (out string) {
return in + "hi"
}
plugin.AddHook("haha", handle)
expect(t, common.RunSshook("haha", "ho") == "hohi", "Sshook didn't give hohi")
plugin.RemoveHook("haha", handle)
expect(t, common.RunSshook("haha", "ho") == "ho", "Sshook shouldn't have anything bound to it anymore")
// TODO: Add tests for more hook types
}
func TestPhrases(t *testing.T) {
expect(t, common.GetGlobalPermPhrase("BanUsers") == "Can ban users", "Not the expected phrase")
expect(t, common.GetGlobalPermPhrase("NoSuchPerm") == "{lang.perms[NoSuchPerm]}", "Not the expected phrase")
expect(t, common.GetLocalPermPhrase("ViewTopic") == "Can view topics", "Not the expected phrase")
expect(t, common.GetLocalPermPhrase("NoSuchPerm") == "{lang.perms[NoSuchPerm]}", "Not the expected phrase")
// TODO: Cover the other phrase types, also try switching between languages to see if anything strange happens
} }
func TestSlugs(t *testing.T) { func TestSlugs(t *testing.T) {

View File

@ -132,6 +132,7 @@ func AnalyticsViews(w http.ResponseWriter, r *http.Request, user common.User) co
revLabelList, labelList, viewMap := analyticsTimeRangeToLabelList(timeRange) revLabelList, labelList, viewMap := analyticsTimeRangeToLabelList(timeRange)
common.DebugLog("in panel.AnalyticsViews") common.DebugLog("in panel.AnalyticsViews")
// TODO: Add some sort of analytics store / iterator?
acc := qgen.Builder.Accumulator() acc := qgen.Builder.Accumulator()
rows, err := acc.Select("viewchunks").Columns("count, createdAt").Where("route = ''").DateCutoff("createdAt", timeRange.Quantity, timeRange.Unit).Query() rows, err := acc.Select("viewchunks").Columns("count, createdAt").Where("route = ''").DateCutoff("createdAt", timeRange.Quantity, timeRange.Unit).Query()
if err != nil && err != sql.ErrNoRows { if err != nil && err != sql.ErrNoRows {