Compare commits

9 Commits
Author SHA1 Message Date
Quinta 8d2dc30777 Updated testing 2024-06-10 22:31:55 +02:00
Quinta 108c694a3b Merge branch 'main' into testing 2024-06-10 21:55:06 +02:00
Quinta 5622aceeff Updated gitignore of testing branch
Co-authored-by: Quinta <0pietroquintavalle0@gmail.com>
2024-06-09 14:43:46 +02:00
Quinta 7845e9461b Revised Powershell script testing 2024-06-09 14:42:39 +02:00
Pietro Quintavalle ddc78f35e0 Merge remote-tracking branch 'origin/main' into testing
# Conflicts:
#	install_obsidian.ps1
2024-06-09 14:35:04 +02:00
Quinta e4772c09b6 Revised installer 2024-06-09 14:13:46 +02:00
Quinta 876d2dab3d Removed files 2024-06-09 14:09:39 +02:00
Quinta 71963cca8e Added testing and code checks 2024-06-09 14:08:49 +02:00
Quinta f21f7cca44 Added testing and code checks 2024-06-09 14:04:33 +02:00
5 changed files with 385 additions and 22 deletions
+2 -1
View File
@@ -1,2 +1,3 @@
/ObsidianInstaller.exe
.idea
.idea
/invalid_plugins.json
+212
View File
@@ -0,0 +1,212 @@
# Define Test-Administrator function
function Test-Administrator {
$currentPrincipal = New-Object Security.Principal.WindowsPrincipal([Security.Principal.WindowsIdentity]::GetCurrent())
return $currentPrincipal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
}
function Test-AdminPrivilege {
if (-Not (Test-Administrator)) {
Write-Output "Running as non-admin user for testing admin check..."
} else {
Write-Output "Running as admin user for testing admin check..."
}
}
function Test-ChocolateyInstallation {
Write-Output "Simulating environment without Chocolatey..."
Remove-Item -Path "C:\ProgramData\chocolatey" -Recurse -Force -ErrorAction SilentlyContinue
if (-Not (Get-Command choco -ErrorAction SilentlyContinue)) {
Write-Output "Chocolatey is not installed. Proceeding with installation..."
} else {
Write-Output "Chocolatey is already installed."
}
}
function Test-ObsidianDownload {
Write-Output "Simulating download failure..."
Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings" -Name "ProxyEnable" -Value 1
Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings" -Name "ProxyServer" -Value "127.0.0.1:8080"
Start-Sleep -Seconds 10 # Ensure proxy settings take effect
Write-Output "Downloading Obsidian installer..."
try {
Invoke-WebRequest -Uri "https://github.com/obsidianmd/obsidian-releases/releases/download/v1.6.3/Obsidian.1.6.3.exe" -OutFile "ObsidianInstaller.exe" -ErrorAction Stop
} catch {
Write-Output "Download failed as expected."
}
if (Test-Path "ObsidianInstaller.exe") {
Write-Output "Download succeeded unexpectedly."
} else {
Write-Output "Download failed as expected."
}
# Clean up proxy settings
Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings" -Name "ProxyEnable" -Value 0
}
# Simulate invalid plugins.json file
Set-Content -Path "invalid_plugins.json" -Value @"
{
"core_plugins": ["plugin1", "plugin2"]
"community_plugins": ["plugin3", "plugin4"]
}
"@
function Test-InvalidPluginConfig {
Write-Output "Testing with invalid plugins.json..."
try {
$null = Get-Content -Raw -Path "invalid_plugins.json" | ConvertFrom-Json
} catch {
Write-Output "Caught error parsing invalid plugins.json as expected: $_"
}
}
function Test-ObsidianInstallation {
Write-Output "Testing Obsidian installation..."
Write-Output "Installing Obsidian for Windows..."
if (-Not (Get-Command choco -ErrorAction SilentlyContinue)) {
Write-Output "Chocolatey is not installed. Installing Chocolatey..."
Set-ExecutionPolicy Bypass -Scope Process -Force;
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072;
$script = (New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1')
Invoke-Command -ScriptBlock ([ScriptBlock]::Create($script))
}
choco install -y jq
Write-Output "Downloading Obsidian installer..."
$installerPath = "$env:TEMP\ObsidianInstaller.exe"
Invoke-WebRequest -Uri "https://github.com/obsidianmd/obsidian-releases/releases/download/v1.6.3/Obsidian.1.6.3.exe" -OutFile $installerPath
# Check if the installer was downloaded
if (Test-Path $installerPath) {
Write-Output "Running Obsidian installer..."
$startProcess = Start-Process -FilePath $installerPath -ArgumentList "/S" -PassThru -Wait
Write-Output "Installer exit code: $($startProcess.ExitCode)"
# Check for Obsidian executable in possible installation paths
$obsidianPaths = @(
"C:\Program Files\Obsidian\Obsidian.exe",
"$env:LOCALAPPDATA\Programs\Obsidian\Obsidian.exe",
"$env:LOCALAPPDATA\Obsidian\Obsidian.exe"
)
$obsidianInstalled = $false
foreach ($path in $obsidianPaths) {
if (Test-Path $path) {
$obsidianInstalled = $true
Write-Output "Obsidian found at $path"
break
}
}
if ($obsidianInstalled) {
Write-Output "Obsidian installed successfully."
} else {
Write-Output "Obsidian installation failed."
exit 1
}
} else {
Write-Output "Failed to download Obsidian installer."
exit 1
}
}
function Initialize-ObsidianConfig {
Write-Output "Initializing Obsidian configuration..."
$vaultPath = "$env:USERPROFILE\Documents\ObsidianVault"
$configPath = "$vaultPath\.obsidian\config"
if (-Not (Test-Path $vaultPath)) {
Write-Output "Creating Obsidian vault directory..."
New-Item -ItemType Directory -Path $vaultPath | Out-Null
}
if (-Not (Test-Path $configPath)) {
Write-Output "Creating default Obsidian config..."
$defaultConfig = @{
"plugin:file-explorer" = $true;
"plugin:global-search" = $true;
}
$defaultConfig | ConvertTo-Json -Compress | Set-Content -Path $configPath
}
}
function Test-PluginInstallation {
Write-Output "Testing plugin installation..."
# Define the vault path and plugins directory
$vaultPath = "$env:USERPROFILE\Documents\ObsidianVault" # Update this path as needed
$pluginsDir = "$vaultPath\.obsidian\plugins"
# Ensure the plugins directory exists
if (-Not (Test-Path $pluginsDir)) {
New-Item -ItemType Directory -Path $pluginsDir | Out-Null
}
# Get the list of installed plugins before installation
$pluginsBefore = Get-ChildItem -Path $pluginsDir
# Simulate plugin installation
$pluginsConfigPath = ".\plugins.json"
$pluginsConfig = Get-Content -Raw -Path $pluginsConfigPath | ConvertFrom-Json
$corePlugins = $pluginsConfig.core_plugins
$communityPlugins = $pluginsConfig.community_plugins
# Enable core plugins
$configPath = "$vaultPath\.obsidian\config"
if (-Not (Test-Path $configPath)) {
Initialize-ObsidianConfig
}
$config = Get-Content -Raw -Path $configPath | ConvertFrom-Json
foreach ($plugin in $corePlugins) {
Write-Output "Enabling core plugin: $plugin"
$config["plugin:$plugin"] = $true
}
$config | ConvertTo-Json -Compress | Set-Content -Path $configPath
# Install community plugins
foreach ($plugin in $communityPlugins) {
Write-Output "Installing community plugin: $plugin"
$pluginName = $plugin -replace '/','-'
$pluginUrl = "https://github.com/$plugin/releases/latest/download/main.js"
$pluginDir = "$pluginsDir\$pluginName"
if (-Not (Test-Path $pluginDir)) {
New-Item -ItemType Directory -Path $pluginDir | Out-Null
}
try {
Invoke-WebRequest -Uri $pluginUrl -OutFile "$pluginDir\main.js" -ErrorAction Stop
} catch {
Write-Output "Failed to download plugin from $pluginUrl"
}
}
# Get the list of installed plugins after installation
$pluginsAfter = Get-ChildItem -Path $pluginsDir
# Compare the before and after lists
Write-Output "Plugins before installation:"
$pluginsBefore | ForEach-Object { Write-Output $_.Name }
Write-Output "Plugins after installation:"
$pluginsAfter | ForEach-Object { Write-Output $_.Name }
# Check if new plugins were installed
$newPlugins = Compare-Object -ReferenceObject $pluginsBefore -DifferenceObject $pluginsAfter
if ($newPlugins) {
Write-Output "New plugins installed successfully."
} else {
Write-Output "No new plugins were installed."
}
}
# Run tests
Test-AdminPrivilege
Test-ChocolateyInstallation
Test-ObsidianDownload
Test-InvalidPluginConfig
Test-ObsidianInstallation
Test-PluginInstallation
+112
View File
@@ -0,0 +1,112 @@
#!/bin/bash
function test_os_selection {
echo "Testing OS selection..."
echo "L" | ./install_obsidian.sh
echo "M" | ./install_obsidian.sh
echo "W" | ./install_obsidian.sh
}
function test_dependencies_installation {
echo "Simulating environment without wget and jq..."
sudo apt remove -y wget jq
echo "Installing dependencies..."
sudo apt update
sudo apt install -y wget jq
if ! command -v wget &> /dev/null || ! command -v jq &> /dev/null; then
echo "Failed to install dependencies."
else
echo "Dependencies installed successfully."
fi
}
function test_obsidian_download_failure {
echo "Simulating download failure..."
sudo iptables -A OUTPUT -p tcp --dport 443 -j REJECT
echo "Downloading Obsidian..."
wget https://github.com/obsidianmd/obsidian-releases/releases/download/v1.6.3/Obsidian-1.6.3.AppImage -O obsidian.AppImage
if [ ! -f obsidian.AppImage ]; then
echo "Download failed as expected."
else
echo "Download succeeded unexpectedly."
fi
# Clean up iptables rule
sudo iptables -D OUTPUT -p tcp --dport 443 -j REJECT
}
# Create an invalid plugins.json file
echo '{
"core_plugins": ["plugin1", "plugin2"],
"community_plugins": ["plugin3", "plugin4"]
}' > invalid_plugins.json
function test_invalid_plugins_config {
echo "Testing with invalid plugins.json..."
if jq . invalid_plugins.json; then
echo "Invalid plugins.json parsed unexpectedly."
else
echo "Caught error parsing invalid plugins.json as expected."
fi
}
function test_plugin_installation {
echo "Testing plugin installation..."
if [[ "$OSTYPE" == "linux-gnu"* ]]; then
CONFIG_DIR="$HOME/.config/obsidian"
elif [[ "$OSTYPE" == "darwin"* ]]; then
CONFIG_DIR="$HOME/Library/Application Support/obsidian"
fi
PLUGINS_DIR="$CONFIG_DIR/plugins"
mkdir -p "$PLUGINS_DIR"
PLUGINS_FILE=plugins.json
echo '{
"core_plugins": [
"file-explorer",
"global-search"
],
"community_plugins": [
"tgrosinger/advanced-tables-obsidian",
"mgmeyers/obsidian-kanban"
]
}' > "$PLUGINS_FILE"
# Capture the list of installed plugins before running the installation script
PLUGINS_BEFORE=$(ls -1 "$PLUGINS_DIR")
# Run the installation script
./install_obsidian.sh
# Capture the list of installed plugins after running the installation script
PLUGINS_AFTER=$(ls -1 "$PLUGINS_DIR")
# Compare the lists of plugins
echo "Plugins before installation:"
echo "$PLUGINS_BEFORE"
echo "Plugins after installation:"
echo "$PLUGINS_AFTER"
# Check for newly installed plugins
NEW_PLUGINS=$(comm -13 <(echo "$PLUGINS_BEFORE") <(echo "$PLUGINS_AFTER"))
if [ -n "$NEW_PLUGINS" ]; then
echo "New plugins installed successfully:"
echo "$NEW_PLUGINS"
else
echo "No new plugins were installed."
fi
}
# Run tests
test_os_selection
test_dependencies_installation
test_obsidian_download_failure
test_invalid_plugins_config
test_plugin_installation
+33 -9
View File
@@ -9,20 +9,21 @@ function Install-Obsidian-Windows {
Write-Output "Installing Obsidian for Windows..."
if (-Not (Get-Command choco -ErrorAction SilentlyContinue)) {
Write-Output "Chocolatey is not installed. Installing Chocolatey..."
Set-ExecutionPolicy Bypass -Scope Process -Force;
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072;
Set-ExecutionPolicy Bypass -Scope Process -Force
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072
$script = (New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1')
Invoke-Command -ScriptBlock ([ScriptBlock]::Create($script))
}
choco install -y jq
Write-Output "Downloading Obsidian installer..."
Invoke-WebRequest -Uri "https://github.com/obsidianmd/obsidian-releases/releases/download/v1.6.3/Obsidian.1.6.3.exe" -OutFile "ObsidianInstaller.exe"
$installerPath = "$env:TEMP\ObsidianInstaller.exe"
Invoke-WebRequest -Uri "https://github.com/obsidianmd/obsidian-releases/releases/download/v1.6.3/Obsidian.1.6.3.exe" -OutFile $installerPath
# Check if the installer was downloaded
if (Test-Path "ObsidianInstaller.exe") {
if (Test-Path $installerPath) {
Write-Output "Running Obsidian installer..."
$startProcess = Start-Process -FilePath .\ObsidianInstaller.exe -ArgumentList "/S" -PassThru -Wait
$startProcess = Start-Process -FilePath $installerPath -ArgumentList "/S" -PassThru -Wait
Write-Output "Installer exit code: $($startProcess.ExitCode)"
# Check for Obsidian executable in possible installation paths
@@ -62,27 +63,50 @@ function Install-Plugin {
Stop-Process -Name "Obsidian" -Force
}
# Define the vault path and plugins directory
$vaultPath = "$env:USERPROFILE\Documents\ObsidianVault" # Update this path as needed
$pluginsDir = "$vaultPath\.obsidian\plugins"
# Create the plugins directory if it doesn't exist
$pluginsDir = "$env:APPDATA\obsidian\plugins"
if (-Not (Test-Path $pluginsDir)) {
New-Item -ItemType Directory -Path $pluginsDir | Out-Null
}
# Read plugins configuration file
$pluginsConfig = Get-Content -Raw -Path "plugins.json" | ConvertFrom-Json
$pluginsConfigPath = ".\plugins.json" # Ensure this is the correct path to your plugins.json file
if (-Not (Test-Path $pluginsConfigPath)) {
Write-Output "plugins.json file not found."
exit 1
}
$pluginsConfig = Get-Content -Raw -Path $pluginsConfigPath | ConvertFrom-Json
$corePlugins = $pluginsConfig.core_plugins
$communityPlugins = $pluginsConfig.community_plugins
# Enable core plugins
$configPath = "$vaultPath\.obsidian\config"
if (-Not (Test-Path $configPath)) {
Write-Output "Obsidian config not found. Ensure Obsidian has been started at least once with the vault."
exit 1
}
$config = Get-Content -Raw -Path $configPath | ConvertFrom-Json
foreach ($plugin in $corePlugins) {
Write-Output "Enabling core plugin: $plugin"
New-Item -ItemType File -Path "$pluginsDir\$plugin" | Out-Null
$config["plugin:$plugin"] = $true
}
$config | ConvertTo-Json -Compress | Set-Content -Path $configPath
# Install community plugins
foreach ($plugin in $communityPlugins) {
Write-Output "Installing community plugin: $plugin"
New-Item -ItemType Directory -Path "$pluginsDir\$plugin" | Out-Null
$pluginName = $plugin -replace '/','-'
$pluginUrl = "https://github.com/$plugin/releases/latest/download/main.js"
$pluginDir = "$pluginsDir\$pluginName"
if (-Not (Test-Path $pluginDir)) {
New-Item -ItemType Directory -Path $pluginDir | Out-Null
}
Invoke-WebRequest -Uri $pluginUrl -OutFile "$pluginDir\main.js"
}
Write-Output "Plugins installed successfully."
+26 -12
View File
@@ -9,6 +9,10 @@ install_obsidian_linux() {
chmod +x obsidian.AppImage
./obsidian.AppImage &
# Wait a bit to ensure Obsidian initializes its config
sleep 10
pkill -f obsidian.AppImage
# Simulate creating a command alias for testing
sudo ln -sf $(pwd)/obsidian.AppImage /usr/local/bin/obsidian
}
@@ -27,40 +31,50 @@ install_obsidian_macos() {
hdiutil detach /Volumes/Obsidian
open /Applications/Obsidian.app &
# Wait a bit to ensure Obsidian initializes its config
sleep 10
pkill Obsidian
# Simulate creating a command alias for testing
sudo ln -sf /Applications/Obsidian.app/Contents/MacOS/Obsidian /usr/local/bin/obsidian
}
install_plugins() {
echo "Installing plugins..."
if [[ "$OSTYPE" == "linux-gnu"* ]]; then
pkill Obsidian
pkill -f obsidian.AppImage
CONFIG_DIR="$HOME/.config/obsidian"
elif [[ "$OSTYPE" == "darwin"* ]]; then
pkill Obsidian
elif [[ "$OSTYPE" == "cygwin" || "$OSTYPE" == "msys" || "$OSTYPE" == "win32" ]]; then
taskkill /IM Obsidian.exe /F
CONFIG_DIR="$HOME/Library/Application Support/obsidian"
fi
if [[ "$OSTYPE" == "linux-gnu"* || "$OSTYPE" == "darwin"* ]]; then
mkdir -p ~/.config/obsidian/plugins
elif [[ "$OSTYPE" == "cygwin" || "$OSTYPE" == "msys" || "$OSTYPE" == "win32" ]]; then
mkdir -p "$APPDATA\obsidian\plugins"
fi
mkdir -p "$CONFIG_DIR/plugins"
PLUGINS_FILE=plugins.json
CORE_PLUGINS=$(jq -r '.core_plugins[]' $PLUGINS_FILE)
COMMUNITY_PLUGINS=$(jq -r '.community_plugins[]' $PLUGINS_FILE)
# Enable core plugins
CONFIG_FILE="$CONFIG_DIR/config"
if [[ ! -f "$CONFIG_FILE" ]]; then
echo "{}" > "$CONFIG_FILE"
fi
for plugin in $CORE_PLUGINS; do
echo "Enabling core plugin: $plugin"
# Simulate enabling core plugin by creating a file
touch "$HOME/.config/obsidian/plugins/$plugin"
jq ". + {\"plugin:$plugin\": true}" "$CONFIG_FILE" > tmp.json && mv tmp.json "$CONFIG_FILE"
done
# Install community plugins
for plugin in $COMMUNITY_PLUGINS; do
echo "Installing community plugin: $plugin"
# Simulate installing community plugin by creating a directory
mkdir -p "$HOME/.config/obsidian/plugins/$plugin"
PLUGIN_NAME=$(echo $plugin | sed 's/\//-/g')
PLUGIN_URL="https://github.com/$plugin/releases/latest/download/main.js"
PLUGIN_DIR="$CONFIG_DIR/plugins/$PLUGIN_NAME"
mkdir -p "$PLUGIN_DIR"
wget "$PLUGIN_URL" -O "$PLUGIN_DIR/main.js" || echo "Failed to download plugin $plugin"
done
echo "Plugins installed successfully!"