Skip to content
Merged
Changes from 3 commits
Commits
Show all changes
83 commits
Select commit Hold shift + click to select a range
5415967
FOUR-20912: Enhance Test Coverage for Screens Functionality Before A…
rodriquelca Nov 25, 2024
d3dcecc
test: login option settings
devmiguelangel Nov 26, 2024
da55d6c
test: session control settings
devmiguelangel Nov 26, 2024
6b971b3
Add a negative test, when the storage fails. Something
rodriquelca Nov 26, 2024
d2ca132
Merge pull request #7764 from ProcessMaker/feature/FOUR-20912
caleeli Nov 26, 2024
6f48021
test: auth settings
devmiguelangel Nov 26, 2024
a3048b5
Merge pull request #7766 from ProcessMaker/FOUR-20504
caleeli Nov 27, 2024
5ecd24d
feat: add a custom cache class structure
devmiguelangel Nov 29, 2024
e4deb5a
test: add tests for SettingCache methods
devmiguelangel Nov 29, 2024
b2b983d
feat: organize cache classes
devmiguelangel Nov 29, 2024
3cf3c6d
Merge branch 'release-2024-fall' into epic/FOUR-20326
devmiguelangel Nov 29, 2024
0470d27
Merge branch 'epic/FOUR-20326' into FOUR-20467
devmiguelangel Nov 29, 2024
2a1b3b5
fix(cr): enhance settings cache error handling and configuration check
devmiguelangel Nov 29, 2024
e21e9d8
Merge pull request #7779 from ProcessMaker/FOUR-20467
caleeli Nov 29, 2024
d4e09e5
ref: remame setting cache manager test
devmiguelangel Dec 2, 2024
655d803
test: get setting from cache
devmiguelangel Dec 2, 2024
f794927
FOUR-20911: Caching Screens
rodriquelca Dec 2, 2024
1204f7c
feat: get setting from cache
devmiguelangel Dec 3, 2024
c9b9b20
Merge branch 'release-2024-fall' into epic/FOUR-20326
devmiguelangel Dec 3, 2024
349b512
Merge branch 'epic/FOUR-20326' into FOUR-20492
devmiguelangel Dec 3, 2024
6546a4e
feat: enhance setting cache manager
devmiguelangel Dec 3, 2024
291d1f9
fix failing test in TaskControllerTestV1
rodriquelca Dec 3, 2024
10df63b
FOUR-20915: Cache Performance Monitoring
rodriquelca Dec 4, 2024
79b2320
add documentation
rodriquelca Dec 4, 2024
a0fc099
fix CR notes
rodriquelca Dec 4, 2024
571a0c7
Merge remote-tracking branch 'origin/feature/FOUR-20911' into feature…
rodriquelca Dec 4, 2024
de2a645
Merge pull request #7787 from ProcessMaker/feature/FOUR-20911
caleeli Dec 4, 2024
be4afac
implement CacheMetricDcorators to the cacheFactory
rodriquelca Dec 4, 2024
697821d
add documentations
rodriquelca Dec 4, 2024
d628a7c
remove alternatives form documentation
rodriquelca Dec 4, 2024
7cf1abf
remove savedsarch config file
rodriquelca Dec 4, 2024
78102cb
cleand code, scredule metrics comand daily
rodriquelca Dec 4, 2024
955b0ac
remove command tests
rodriquelca Dec 4, 2024
6b860a6
Merge pull request #7783 from ProcessMaker/FOUR-20492
caleeli Dec 4, 2024
272d3b7
Merge branch 'release-2024-fall' into epic/FOUR-20326
devmiguelangel Dec 5, 2024
f3021b1
feat: clear by pattern, clear all settings
devmiguelangel Dec 5, 2024
3370ea6
feat: add cache settings to .env.example
devmiguelangel Dec 5, 2024
33c010d
FOUR-20913: invalidate Screen Cache on Translation changes
rodriquelca Dec 5, 2024
2c61caa
fix(cr): enhance SettingCacheManager to determine cache driver and im…
devmiguelangel Dec 5, 2024
207370a
FOUR-20913: Invalidate Screen Cache on Translation changes
rodriquelca Dec 6, 2024
20fa736
clear debug
rodriquelca Dec 6, 2024
e1e6b4e
Merge pull request #7795 from ProcessMaker/FOUR-20532
caleeli Dec 6, 2024
8ba8562
fi bad event service provider definition
rodriquelca Dec 6, 2024
5d76ff0
fix test cache factory
rodriquelca Dec 6, 2024
aae1743
Merge pull request #7793 from ProcessMaker/feature/FOUR-20915
caleeli Dec 6, 2024
127846d
FOUR-20913: invalidate Screen Cache on Translation changes
rodriquelca Dec 5, 2024
d0fa80b
FOUR-20913: Invalidate Screen Cache on Translation changes
rodriquelca Dec 6, 2024
cf9db1b
clear debug
rodriquelca Dec 6, 2024
1515237
fi bad event service provider definition
rodriquelca Dec 6, 2024
b78499d
fix test cache factory
rodriquelca Dec 6, 2024
5e9f39c
update ScreenCacheManagerTest for failing tests
rodriquelca Dec 6, 2024
039ea48
fix merge conflicts
rodriquelca Dec 6, 2024
aa36aab
complete getOrCache method
rodriquelca Dec 6, 2024
9a7be50
feat: invalidate settings cache
devmiguelangel Dec 6, 2024
9c9ccc0
Merge pull request #7803 from ProcessMaker/feature/FOUR-20913
caleeli Dec 6, 2024
5665379
Merge pull request #7808 from ProcessMaker/FOUR-20909
caleeli Dec 6, 2024
98a9492
add misses and Miss Ratio
rodriquelca Dec 12, 2024
fa63a6a
Merge branch 'release-2024-fall' into epic/FOUR-20326
devmiguelangel Dec 17, 2024
6612e70
feat: add the getKeysByPattern method
devmiguelangel Dec 17, 2024
af794c9
feat: enhance SettingCacheManager to extend CacheABC and improve cach…
devmiguelangel Dec 17, 2024
aec1487
feat: add console command to clear settings cache
devmiguelangel Dec 17, 2024
88e6e76
refactor: rename CacheABC to CacheManagerBase
devmiguelangel Dec 17, 2024
df09a43
fix(cr): introduce CacheManagerException and update error handling in…
devmiguelangel Dec 17, 2024
379c687
fix: improve cache driver handling
devmiguelangel Dec 18, 2024
48f0e56
refactor: update SettingCacheManager
devmiguelangel Dec 18, 2024
24075d9
FOUR-20917: Ensure Scalable Caching Solution
rodriquelca Dec 18, 2024
0218c1c
refactor: simplify cache driver handling
devmiguelangel Dec 18, 2024
9856bf6
standardize invalidate cache
rodriquelca Dec 18, 2024
5f4c607
feat: enhance getKeysByPattern method to accept a connection
devmiguelangel Dec 18, 2024
faf2411
improve clearCompiledAssets for the cache manager
rodriquelca Dec 19, 2024
2e96f68
complete Setting cache factory
rodriquelca Dec 19, 2024
77994af
fix: update SettingCacheTest to use Cache facade for consistency
devmiguelangel Dec 19, 2024
965fcf1
fix TaskControllerTest
rodriquelca Dec 19, 2024
626adf1
fix: clean code
devmiguelangel Dec 19, 2024
d060119
fix failing test removing mockery
rodriquelca Dec 19, 2024
fafc69e
Merge pull request #7836 from ProcessMaker/FOUR-21263
caleeli Dec 19, 2024
5077d24
fix merge conflicts
rodriquelca Dec 19, 2024
c1ddde2
Remove logging in Setting model
caleeli Dec 19, 2024
58433ea
Merge pull request #7841 from ProcessMaker/feature/FOUR-20917
caleeli Dec 19, 2024
908abff
Cache screen fields
caleeli Jan 2, 2025
4407335
Add unit tests for loading screen fields from cache
caleeli Jan 2, 2025
9008be1
Implement cache handling for screen fields by checking for empty coll…
caleeli Jan 3, 2025
d061116
Merge pull request #7858 from ProcessMaker/FOUR-21383
caleeli Jan 4, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
148 changes: 138 additions & 10 deletions tests/Feature/Screens/ScreenCompiledManagerTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

namespace Tests\Feature;

use Illuminate\Filesystem\FileNotFoundException;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Storage;
use ProcessMaker\Managers\ScreenCompiledManager;
Expand Down Expand Up @@ -157,27 +158,33 @@ public function it_clears_process_screens_cache()
}

/**
* Validate a screen key can be created
* Validate that a screen key can be created with various process versions, screen versions, and languages.
*
* @test
*/
public function it_creates_a_screen_key()
public function it_creates_a_screen_key_with_various_versions()
{
// Arrange
$manager = new ScreenCompiledManager();
$processId = '123';
$processVersionId = '1';
$language = 'en';
$processVersionIds = ['1', '2', '3'];
$languages = ['en', 'es', 'fr', 'de', 'it', 'pt', 'zh', 'ja', 'ru', 'ar'];
$screenId = '456';
$screenVersionId = '1';
$screenVersionIds = ['1', '2'];

$expectedKey = 'pid_123_1_en_sid_456_1';
foreach ($processVersionIds as $processVersionId) {
foreach ($screenVersionIds as $screenVersionId) {
foreach ($languages as $language) {
$expectedKey = "pid_{$processId}_{$processVersionId}_{$language}_sid_{$screenId}_{$screenVersionId}";

// Create the screen key
$screenKey = $manager->createKey($processId, $processVersionId, $language, $screenId, $screenVersionId);
// Create the screen key
$screenKey = $manager->createKey($processId, $processVersionId, $language, $screenId, $screenVersionId);

// Assert
$this->assertEquals($expectedKey, $screenKey);
// Assert
$this->assertEquals($expectedKey, $screenKey);
}
}
}
}

/**
Expand All @@ -203,4 +210,125 @@ public function it_gets_the_last_screen_version_id()
// Assert the ID is the expected one
$this->assertEquals($expectedId, $lastId);
}

/**
* Validate storing compiled content with empty content
*
* @test
*/
public function it_stores_empty_compiled_content()
{
// Arrange
$manager = new ScreenCompiledManager();
$screenKey = 'empty_screen_key';
$compiledContent = '';

// Act
$manager->storeCompiledContent($screenKey, $compiledContent);

// Assert
$filename = 'screen_' . $screenKey . '.bin';
$storagePath = $this->storagePath . $filename;

Storage::disk($this->storageDisk)->assertExists($storagePath);
$storedContent = Storage::disk($this->storageDisk)->get($storagePath);
$this->assertEquals(serialize($compiledContent), $storedContent);
}

/**
* Validate exception handling when storage is unavailable
*
* @test
*/
public function it_handles_storage_exceptions()
{
// Arrange
$manager = new ScreenCompiledManager();
$screenKey = 'exception_screen_key';
$compiledContent = ['key' => 'value'];

// Simulate storage exception
Storage::shouldReceive('disk->put')
->andThrow(new \Exception('Storage unavailable'));

// Act & Assert
$this->expectException(\Exception::class);
$this->expectExceptionMessage('Storage unavailable');

$manager->storeCompiledContent($screenKey, $compiledContent);
}

/**
* Validate clearing compiled assets when directory does not exist
*
* @test
*/
public function it_clears_compiled_assets_when_directory_does_not_exist()
{
// Arrange
$manager = new ScreenCompiledManager();

// Ensure directory does not exist
Storage::disk($this->storageDisk)->deleteDirectory($this->storagePath);

// Act
$manager->clearCompiledAssets();

// Assert the directory has been recreated
Storage::disk($this->storageDisk)->assertExists($this->storagePath);
}

/**
* Validate that storing compiled content fails with invalid data
*
* @test
*/
public function it_fails_with_invalid_screen_key()
{
// Arrange
$manager = new ScreenCompiledManager();

// Test cases with invalid screen keys
$invalidKeys = [
'', // Empty string
null, // Null value
str_repeat('a', 1000), // Extremely long key
'../../malicious/path', // Path traversal attempt
'special@#$%chars', // Special characters
];

foreach ($invalidKeys as $invalidKey) {
try {
$manager->storeCompiledContent($invalidKey, ['test' => 'content']);
$this->fail('Expected exception was not thrown for key: ' . (string) $invalidKey);
} catch (\TypeError|\Exception $e) {
// Assert that an exception was thrown
$this->assertTrue(true);
}
}
}

/**
* Test handling of storage limit scenarios when storing compiled screen content
*
* @test
*/
public function it_handles_storage_limit_scenarios()
{
// Arrange
$manager = new ScreenCompiledManager();
$screenKey = $manager->createKey('1', '1', 'en', '1', '1');
$compiledContent = ['test' => 'content'];

// Simulate storage limit reached by throwing a specific exception
Storage::shouldReceive('disk->put')
->andThrow(new \Exception('Storage limit reached'));

// Act & Assert
$this->expectException(\Exception::class);
$this->expectExceptionMessage('Storage limit reached');

// Attempt to store compiled content, expecting an exception
$manager->storeCompiledContent($screenKey, $compiledContent);
}
}