Skip to content

Commit

Permalink
feat: Disable buttons
Browse files Browse the repository at this point in the history
Remove radicle buttons from Git menu if the project doesn't have any radicle repos

Signed-off-by: stelios maurommatakis <steliosmavr@cytech.gr>
  • Loading branch information
Stelios123 committed May 2, 2024
1 parent 8b688f8 commit 04d5c66
Show file tree
Hide file tree
Showing 4 changed files with 61 additions and 11 deletions.
6 changes: 3 additions & 3 deletions src/main/resources/META-INF/plugin.xml
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@
</action>

<action id="Radicle.Track.New.Ui" class="network.radicle.jetbrains.radiclejetbrainsplugin.actions.RadicleTrackAction"
text="Rad Track" description="Radicle track from toolbar" icon="network.radicle.jetbrains.radiclejetbrainsplugin.icons.RadicleIcons.RADICLE_PULL">
text="Rad Pull" description="Radicle track from toolbar" icon="network.radicle.jetbrains.radiclejetbrainsplugin.icons.RadicleIcons.RADICLE_PULL">
<add-to-group group-id="Git.Experimental.Branch.Popup.Actions" anchor="after" relative-to-action="Radicle.Clone.New.Ui"/>
</action>

Expand Down Expand Up @@ -121,7 +121,7 @@
</action>

<action id="Radicle.Track.trackBartoolbar" class="network.radicle.jetbrains.radiclejetbrainsplugin.actions.RadicleTrackAction"
text="Rad Track" description="Radicle clone from toolbar" icon="network.radicle.jetbrains.radiclejetbrainsplugin.icons.RadicleIcons.RADICLE_PULL">
text="Rad Pull" description="Radicle clone from toolbar" icon="network.radicle.jetbrains.radiclejetbrainsplugin.icons.RadicleIcons.RADICLE_PULL">
<add-to-group group-id="VcsNavBarToolbarActions" anchor="after" relative-to-action="Radicle.Clone.cloneBartoolbar"/>
</action>

Expand All @@ -141,7 +141,7 @@
</action>

<action id="Radicle.Track.toolbar" class="network.radicle.jetbrains.radiclejetbrainsplugin.actions.RadicleTrackAction"
text="Rad Track" description="Radicle track from toolbar" icon="network.radicle.jetbrains.radiclejetbrainsplugin.icons.RadicleIcons.RADICLE_PULL">
text="Rad Pull" description="Radicle track from toolbar" icon="network.radicle.jetbrains.radiclejetbrainsplugin.icons.RadicleIcons.RADICLE_PULL">
<add-to-group group-id="VcsToolbarActions" anchor="after" relative-to-action="Radicle.Clone.toolbar"/>
</action>
</actions>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,11 @@ void initialiseRadicleProject(final RemoteRobot remoteRobot) {
waitFor(ofMinutes(5), () -> projectView.hasText("radicle"));
});

step("initialize project", () -> {
sharedSteps.radInitializeProject(tmpDir);
sharedSteps.refreshFromDisk();
});


step("Ensure Radicle sub-menu category is visible", () -> {

Expand All @@ -116,21 +121,26 @@ void initialiseRadicleProject(final RemoteRobot remoteRobot) {
actionMenu(remoteRobot, "Git", "").click();
actionMenu(remoteRobot, "Radicle", "Git").click();
actionMenuItem(remoteRobot, "Sync Fetch").isShowing();
actionMenuItem(remoteRobot, "Sync").isShowing();
actionMenuItem(remoteRobot, "Clone").isShowing();
actionMenuItem(remoteRobot, "Track").isShowing();
break;
} catch (Exception ignored) {
}
}
actionMenuItem(remoteRobot, "Sync Fetch").isShowing();
actionMenuItem(remoteRobot, "Sync").isShowing();
actionMenuItem(remoteRobot, "Clone").isShowing();
actionMenuItem(remoteRobot, "Track").isShowing();
actionMenuItem(remoteRobot, "Share Project on Radicle").isShowing();
Assertions.assertNull(actionMenuItem(remoteRobot, "Share Project on Radicle"));
});

step("Ensure Radicle toolbar actions show", () -> {
keyboard.hotKey(VK_ESCAPE);
isXPathComponentVisible(idea, "//div[@myicon='rad_sync.svg']");
isXPathComponentVisible(idea, "//div[@myicon='rad_fetch.svg']");
isXPathComponentVisible(idea, "//div[@myicon='rad_clone.svg']");
isXPathComponentVisible(idea, "//div[@myicon='rad_pull.svg']");
});
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,9 @@
import network.radicle.jetbrains.radiclejetbrainsplugin.pages.WelcomeFrameFixture;

import javax.imageio.ImageIO;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.nio.file.Path;
import java.time.Duration;
Expand All @@ -33,6 +35,8 @@
import static java.awt.event.KeyEvent.VK_META;
import static java.awt.event.KeyEvent.VK_S;
import static java.time.Duration.ofSeconds;
import static network.radicle.jetbrains.radiclejetbrainsplugin.pages.ActionMenuFixtureKt.actionMenu;
import static network.radicle.jetbrains.radiclejetbrainsplugin.pages.ActionMenuFixtureKt.actionMenuItem;
import static network.radicle.jetbrains.radiclejetbrainsplugin.pages.DialogFixture.byTitle;

public class ReusableSteps {
Expand Down Expand Up @@ -67,6 +71,35 @@ public static void unlockIdentityWithPassphrase(RemoteRobot remoteRobot) {
} catch (WaitForConditionTimeoutException ignored) { }
}

public void refreshFromDisk() {
actionMenu(remoteRobot, "File", "").click();
actionMenuItem(remoteRobot, "Reload All from Disk").click();
}

public void radInitializeProject(Path localDir) {
String path = "";
if (SystemInfo.isWindows) {
path = localDir.toAbsolutePath().toString().replace("\\", "\\\\") + "\\.git\\config";
} else {
path = localDir.toAbsolutePath() + "/.git/config";
}
try {
File f = new File(path);
if (!f.exists()) {
throw new RuntimeException();
}
FileWriter fw = new FileWriter(path, true);
BufferedWriter bw = new BufferedWriter(fw);
bw.write("[remote \"rad\"]\n" +
"\turl = rad://test\n" +
"\tpushurl = rad://test/test\n" +
"\tfetch = +refs/heads/*:refs/remotes/rad/*");
bw.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}

public void importProjectFromVCS(Path localDir) {
step("Import Project from VCS", () -> {
final WelcomeFrameFixture welcomeFrame = remoteRobot.find(WelcomeFrameFixture.class, Duration.ofSeconds(50));
Expand All @@ -85,9 +118,11 @@ public void importProjectFromVCS(Path localDir) {
//create tmp dir to clone project to:
keyboard.selectAll();
keyboard.backspace();
keyboard.enterText(localDir.toAbsolutePath().toString().replaceAll("\\\\", "\\\\"), 0);


if (SystemInfo.isWindows) {
keyboard.enterText(localDir.toAbsolutePath().toString().replace("\\", "\\\\"), 0);
} else {
keyboard.enterText(localDir.toAbsolutePath().toString(), 0);
}
remoteRobot.find(JButtonFixture.class, byXpath("//div[@text='Clone']")).click();
});
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import com.intellij.remoterobot.data.RemoteComponent
import com.intellij.remoterobot.fixtures.ComponentFixture
import com.intellij.remoterobot.fixtures.FixtureName
import com.intellij.remoterobot.search.locators.byXpath
import com.intellij.remoterobot.utils.WaitForConditionTimeoutException
import com.intellij.remoterobot.utils.waitFor
import java.time.Duration

Expand All @@ -24,12 +25,16 @@ fun RemoteRobot.actionMenu(menuText: String, parentMenuText: String): ActionMenu
return findAll<ActionMenuFixture>(xpath).first()
}

fun RemoteRobot.actionMenuItem(text: String): ActionMenuItemFixture {
fun RemoteRobot.actionMenuItem(text: String): ActionMenuItemFixture? {
val xpath = byXpath("text '$text'", "//div[@class='ActionMenuItem' and @text='$text']")
waitFor (duration = Duration.ofSeconds(5)) {
findAll<ActionMenuItemFixture>(xpath).isNotEmpty()
try {
waitFor (duration = Duration.ofSeconds(5)) {
findAll<ActionMenuItemFixture>(xpath).isNotEmpty()
}
return findAll<ActionMenuItemFixture>(xpath).first()
} catch (e:WaitForConditionTimeoutException) {
return null
}
return findAll<ActionMenuItemFixture>(xpath).first()
}

@FixtureName("ActionMenu")
Expand Down

0 comments on commit 04d5c66

Please sign in to comment.