There were couple of errors in the test:
1. UpdatedScheduledPost will automatically
set the ProcessedAt to now internally inside
toUpdateMap. So setting the value from outside
has no effect.
2. The bug was that if it took more than a
milisecond to capture the time, and then
do the internal call, then the Get call
will have a higher value and therefore fail.
Since UpdatedScheduledPost doesn't return
an updated post, so there is no need
to compare the timestamps at all.
```release-note
NONE
```
* Stop recording unknown platforms as "Windows" in Sessions table
* Add more tests to user_agent_test.go
* MM-61012 Add special handling to OS detection for mobile apps
---------
Co-authored-by: Mattermost Build <build@mattermost.com>
Essentially applying the fix for https://github.com/mattermost/mattermost/pull/29214
to the web package. It seems like the app.StoreOverrideWithCache
function was never used in this package.
Just a small highlight of how much boilerplate is repeated
in multiple packages
```release-note
NONE
```
Co-authored-by: Mattermost Build <build@mattermost.com>
And re-order the server initialization (AGAIN).
For the nth time, we found several bugs in the initialization
process.
1. filestore.NewExportFileBackend and filestore.NewFileBackend
depended on license, but the license wasn't even loaded until
later!
2. The `ps.sqlStore.UpdateLicense` call also didn't work
because the license wouldn't get loaded. It only accidentally
worked because of `ps.AddLicenseListener` which would update
the license later on. We remove that.
Ideally, we would have loaded the license first and then
checked for redis client, but it's very difficult to do that.
Reasons are explained in the code comment.
So we just wait until the license is loaded, and simply throw an
error later.
https://mattermost.atlassian.net/browse/MM-61229
```release-note
NONE
```
---------
Co-authored-by: Mattermost Build <build@mattermost.com>
* MM-61731-enhance-failed-sent-system-bot-message
* adjust test and adjust i18n messages
* set back correct value
* improve naming and get channels logic
* hide channel name if the channel is private
---------
Co-authored-by: Mattermost Build <build@mattermost.com>
Since we have the auto-retry mechanism for replicas,
there is not much benefit in trying 5 times before deciding
to move on.
In the earlier model, we would fail the server startup,
so it made sense to check as many times as possible.
Also reducing the sleep interval so that we can improve
the boot up time in case of a bad replica.
```release-note
NONE
```
* fix: Add job name to the publish report step
---------
Co-authored-by: Mattermost Build <build@mattermost.com>
Co-authored-by: Antonis Stamatiou <stamatiou.antonis@gmail.com>
* Added support for S3 storage classes
* Added missing translations for S3 storage class
* Changed default storage class values to preserve original behaviour
* Changed storage class description and example
* Fix translations ordering
* Change configuration defaults to empty strings
* Remove redundant empty string check
* Validate storage class variable against constants from S3 API docs
* Validate export storage class against constants
* Use slices for config validation
* Applied patch for translation ordering
* MM-60506 - notify user for failed scheduled messages
* add unit tests for handleFailedScheduledMessages and send system-bot message
* fix vet issues
* adjust test for vet report
* make sure to send the message to every user there was a failed message
---------
Co-authored-by: Harshil Sharma <harshil.sharma@mattermost.com>
* Added test for user beloonging to channel but not team
* Added test for read onmly channel
* Added test for fetching scheduled posts for team you don;'t belong to
* Added more tests
* test enhancements
* CI
The Store variable was written to _after_ the server
started which was causing the race.
We simply move it to before we start the server.
While we are here, we fix yet another race condition
which was unrelated, but doing it in one sweep. This
was related to the user props access. When a user is updated,
there was 3 ws events that get sent out, 2 were deep-copied
whereas 1 was not. This led to race condition in postgres
binary-param mode where we were trying to set the user props.
https://mattermost.atlassian.net/browse/MM-61700