3 namespace Tests\Uploads;
5 use BookStack\Uploads\Image;
8 class DrawioTest extends TestCase
10 public function test_get_image_as_base64()
12 $page = $this->entities->page();
14 $imageName = 'first-image.png';
16 $this->files->uploadGalleryImage($this, $imageName, $page->id);
17 /** @var Image $image */
18 $image = Image::query()->first();
19 $image->type = 'drawio';
22 $imageGet = $this->getJson("/images/drawio/base64/{$image->id}");
23 $imageGet->assertJson([
24 'content' => 'iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAIAAAACDbGyAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4gEcDCo5iYNs+gAAAB1pVFh0Q29tbWVudAAAAAAAQ3JlYXRlZCB3aXRoIEdJTVBkLmUHAAAAFElEQVQI12O0jN/KgASYGFABqXwAZtoBV6Sl3hIAAAAASUVORK5CYII=',
28 public function test_non_accessible_image_returns_404_error_and_message()
30 $page = $this->entities->page();
32 $imageName = 'non-accessible-image.png';
34 $this->files->uploadGalleryImage($this, $imageName, $page->id);
35 /** @var Image $image */
36 $image = Image::query()->first();
37 $image->type = 'drawio';
39 $this->permissions->disableEntityInheritedPermissions($page);
41 $imageGet = $this->getJson("/images/drawio/base64/{$image->id}");
42 $imageGet->assertNotFound();
43 $imageGet->assertJson([
44 'message' => 'Drawing data could not be loaded. The drawing file might no longer exist or you may not have permission to access it.',
48 public function test_drawing_base64_upload()
50 $page = $this->entities->page();
51 $editor = $this->users->editor();
52 $this->actingAs($editor);
54 $upload = $this->postJson('images/drawio', [
55 'uploaded_to' => $page->id,
56 'image' => 'image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAIAAAACDbGyAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4gEcDCo5iYNs+gAAAB1pVFh0Q29tbWVudAAAAAAAQ3JlYXRlZCB3aXRoIEdJTVBkLmUHAAAAFElEQVQI12O0jN/KgASYGFABqXwAZtoBV6Sl3hIAAAAASUVORK5CYII=',
59 $upload->assertStatus(200);
62 'uploaded_to' => $page->id,
63 'created_by' => $editor->id,
64 'updated_by' => $editor->id,
67 $image = Image::where('type', '=', 'drawio')->first();
68 $this->assertTrue(file_exists(public_path($image->path)), 'Uploaded image not found at path: ' . public_path($image->path));
70 $testImageData = $this->files->pngImageData();
71 $uploadedImageData = file_get_contents(public_path($image->path));
72 $this->assertTrue($testImageData === $uploadedImageData, 'Uploaded image file data does not match our test image as expected');
75 public function test_drawio_url_can_be_configured()
77 config()->set('services.drawio', 'http://cats.com?dog=tree');
78 $page = $this->entities->page();
79 $editor = $this->users->editor();
81 $resp = $this->actingAs($editor)->get($page->getUrl('/edit'));
82 $resp->assertSee('drawio-url="http://cats.com?dog=tree"', false);
85 public function test_drawio_url_can_be_disabled()
87 config()->set('services.drawio', true);
88 $page = $this->entities->page();
89 $editor = $this->users->editor();
91 $resp = $this->actingAs($editor)->get($page->getUrl('/edit'));
92 $resp->assertSee('drawio-url="https://embed.diagrams.net/?embed=1&proto=json&spin=1&configure=1"', false);
94 config()->set('services.drawio', false);
95 $resp = $this->actingAs($editor)->get($page->getUrl('/edit'));
96 $resp->assertDontSee('drawio-url', false);