diff --git a/app/components/AppFooter.vue b/app/components/AppFooter.vue
index 0018fc414..bcdd3e2e4 100644
--- a/app/components/AppFooter.vue
+++ b/app/components/AppFooter.vue
@@ -11,7 +11,6 @@ const isHome = computed(() => route.name === 'index')
>
@@ -56,6 +55,7 @@ const isHome = computed(() => route.name === 'index')
+
{{ $t('non_affiliation_disclaimer') }}
{{ $t('trademark_disclaimer') }}
diff --git a/app/components/BuildEnvironment.vue b/app/components/BuildEnvironment.vue
index 6482f2bb9..a31f7f8f6 100644
--- a/app/components/BuildEnvironment.vue
+++ b/app/components/BuildEnvironment.vue
@@ -1,16 +1,20 @@
diff --git a/modules/build-env.ts b/modules/build-env.ts
index 24355dcca..265f91262 100644
--- a/modules/build-env.ts
+++ b/modules/build-env.ts
@@ -1,4 +1,4 @@
-import type { BuildInfo } from '../shared/types'
+import type { BuildInfo, EnvType } from '../shared/types'
import { createResolver, defineNuxtModule } from 'nuxt/kit'
import { isCI } from 'std-env'
import { getEnv, version } from '../config/env'
@@ -10,18 +10,31 @@ export default defineNuxtModule({
name: 'npmx:build-env',
},
async setup(_options, nuxt) {
- const { env, commit, shortCommit, branch } = await getEnv(nuxt.options.dev)
-
+ let env: EnvType = 'dev'
nuxt.options.appConfig = nuxt.options.appConfig || {}
nuxt.options.appConfig.env = env
- nuxt.options.appConfig.buildInfo = {
- version,
- time: +Date.now(),
- commit,
- shortCommit,
- branch,
- env,
- } satisfies BuildInfo
+ if (process.env.TEST) {
+ nuxt.options.appConfig.buildInfo = {
+ env,
+ version: '0.0.0',
+ commit: '704987bba88909f3782d792c224bde989569acb9',
+ shortCommit: '704987b',
+ branch: 'xxx',
+ time: 1770237446424,
+ } satisfies BuildInfo
+ } else {
+ const { env: useEnv, commit, shortCommit, branch } = await getEnv(nuxt.options.dev)
+ env = useEnv
+ nuxt.options.appConfig.env = useEnv
+ nuxt.options.appConfig.buildInfo = {
+ version,
+ time: +Date.now(),
+ commit,
+ shortCommit,
+ branch,
+ env,
+ } satisfies BuildInfo
+ }
nuxt.options.nitro.publicAssets = nuxt.options.nitro.publicAssets || []
if (env === 'dev') nuxt.options.nitro.publicAssets.unshift({ dir: resolve('../public-dev') })
diff --git a/shared/types/env.ts b/shared/types/env.ts
index b1583e66d..aabbc8a66 100644
--- a/shared/types/env.ts
+++ b/shared/types/env.ts
@@ -1,8 +1,10 @@
+export type EnvType = 'dev' | 'preview' | 'canary' | 'release'
+
export interface BuildInfo {
version: string
commit: string
shortCommit: string
time: number
branch: string
- env: 'preview' | 'canary' | 'dev' | 'release'
+ env: EnvType
}
diff --git a/test/nuxt/components/AppFooter.spec.ts b/test/nuxt/components/AppFooter.spec.ts
new file mode 100644
index 000000000..c8b4530e5
--- /dev/null
+++ b/test/nuxt/components/AppFooter.spec.ts
@@ -0,0 +1,35 @@
+import { describe, expect, it } from 'vitest'
+import { mountSuspended } from '@nuxt/test-utils/runtime'
+import AppFooter from '~/components/AppFooter.vue'
+
+/* check nuxt module at modules/build-env.ts */
+describe('AppFooter', () => {
+ it('BuildEnvironment is properly displayed at settings', async () => {
+ const buildInfo = useAppConfig().buildInfo
+ const component = await mountSuspended(AppFooter, {
+ route: '/settings',
+ })
+
+ const envSpan = component.find('span.tracking-wider')
+ expect(envSpan.exists()).toBe(true)
+ expect(envSpan.text()).toBe(buildInfo.env)
+ const commitLink = component.find(`a[href$="/commit/${buildInfo.commit}"]`)
+ expect(commitLink.exists()).toBe(true)
+ const tagLink = component.find(`a[href$="/tag/v${buildInfo.commit}"]`)
+ expect(tagLink.exists()).toBe(false)
+ })
+
+ it('BuildEnvironment is hidden at home', async () => {
+ const buildInfo = useAppConfig().buildInfo
+ const component = await mountSuspended(AppFooter, {
+ route: '/',
+ })
+
+ const envSpan = component.find('span.tracking-wider')
+ expect(envSpan.exists()).toBe(false)
+ const commitLink = component.find(`a[href$="/commit/${buildInfo.commit}"]`)
+ expect(commitLink.exists()).toBe(false)
+ const tagLink = component.find(`a[href$="/tag/v${buildInfo.commit}"]`)
+ expect(tagLink.exists()).toBe(false)
+ })
+})
diff --git a/test/nuxt/components/BuildEnvironment.spec.ts b/test/nuxt/components/BuildEnvironment.spec.ts
new file mode 100644
index 000000000..9674e2443
--- /dev/null
+++ b/test/nuxt/components/BuildEnvironment.spec.ts
@@ -0,0 +1,56 @@
+import type { BuildInfo } from '#shared/types'
+import { describe, expect, it } from 'vitest'
+import { mountSuspended } from '@nuxt/test-utils/runtime'
+import BuildEnvironment from '~/components/BuildEnvironment.vue'
+
+describe('BuildEnvironment', () => {
+ it('renders dev environment correctly', async () => {
+ const buildInfo: BuildInfo = {
+ env: 'dev',
+ version: '1.2.3',
+ time: 1234567890,
+ commit: 'abcdef',
+ shortCommit: 'abc',
+ branch: 'main',
+ }
+ const component = await mountSuspended(BuildEnvironment, {
+ props: {
+ buildInfo,
+ },
+ })
+
+ // In dev mode, it shows env name, not version link
+ const envSpan = component.find('span.tracking-wider')
+ expect(envSpan.exists()).toBe(true)
+ expect(envSpan.text()).toBe(buildInfo.env)
+ const commitLink = component.find(`a[href$="/commit/${buildInfo.commit}"]`)
+ expect(commitLink.exists()).toBe(true)
+ const tagLink = component.find(`a[href$="/tag/v${buildInfo.commit}"]`)
+ expect(tagLink.exists()).toBe(false)
+ })
+
+ it('renders release environment correctly', async () => {
+ const buildInfo: BuildInfo = {
+ env: 'release',
+ version: '1.2.3',
+ time: 1234567890,
+ commit: 'abcdef',
+ shortCommit: 'abc',
+ branch: 'release',
+ }
+
+ const component = await mountSuspended(BuildEnvironment, {
+ props: {
+ buildInfo,
+ },
+ })
+
+ // In release mode, it shows tag version link, not env name
+ const envSpan = component.find('span.tracking-wider')
+ expect(envSpan.exists()).toBe(false)
+ const commitLink = component.find(`a[href$="/commit/${buildInfo.commit}"]`)
+ expect(commitLink.exists()).toBe(false)
+ const tagLink = component.find(`a[href$="/tag/v${buildInfo.version}"]`)
+ expect(tagLink.exists()).toBe(true)
+ })
+})