hookehuyr

fix: avoid duplicate wechat share descriptions

...@@ -148,6 +148,27 @@ describe('useShare', () => { ...@@ -148,6 +148,27 @@ describe('useShare', () => {
148 ) 148 )
149 }) 149 })
150 150
151 + it('resolver 显式返回空 desc 时不回退为标题或 description', async () => {
152 + const router = createRouterMock({
153 + meta: { title: '课程详情' },
154 + })
155 +
156 + installWxShareSync(router, {
157 + isEnabled: true,
158 + resolver: vi.fn(() =>
159 + Promise.resolve({
160 + description: '课程详情',
161 + desc: '',
162 + })
163 + ),
164 + })
165 +
166 + await flushMutationObserver()
167 +
168 + expect(wxMocks.updateAppMessageShareData.mock.lastCall[0].title).toBe('美乐爱觉')
169 + expect(wxMocks.updateAppMessageShareData.mock.lastCall[0].desc).toBe('')
170 + })
171 +
151 it('非 cdn 图片地址保持不变', () => { 172 it('非 cdn 图片地址保持不变', () => {
152 expect(normalizeShareImageUrl('https://example.com/image.png')).toBe( 173 expect(normalizeShareImageUrl('https://example.com/image.png')).toBe(
153 'https://example.com/image.png' 174 'https://example.com/image.png'
......
...@@ -170,15 +170,15 @@ const mergeResolvedShareData = ( ...@@ -170,15 +170,15 @@ const mergeResolvedShareData = (
170 ...(resolvedShareData || {}), 170 ...(resolvedShareData || {}),
171 } 171 }
172 172
173 - if (resolvedShareData?.description && !resolvedShareData?.desc) { 173 + if (resolvedShareData && 'description' in resolvedShareData && !('desc' in resolvedShareData)) {
174 mergedShareData.desc = resolvedShareData.description 174 mergedShareData.desc = resolvedShareData.description
175 } 175 }
176 176
177 - if (resolvedShareData?.image && !resolvedShareData?.imgUrl) { 177 + if (resolvedShareData && 'image' in resolvedShareData && !('imgUrl' in resolvedShareData)) {
178 mergedShareData.imgUrl = resolvedShareData.image 178 mergedShareData.imgUrl = resolvedShareData.image
179 } 179 }
180 180
181 - if (resolvedShareData?.url && !resolvedShareData?.link) { 181 + if (resolvedShareData && 'url' in resolvedShareData && !('link' in resolvedShareData)) {
182 mergedShareData.link = resolvedShareData.url 182 mergedShareData.link = resolvedShareData.url
183 } 183 }
184 184
......
...@@ -219,15 +219,15 @@ const mergeResolvedOgMeta = ( ...@@ -219,15 +219,15 @@ const mergeResolvedOgMeta = (
219 ...(resolvedPayload || {}), 219 ...(resolvedPayload || {}),
220 } 220 }
221 221
222 - if (resolvedPayload?.desc && !resolvedPayload?.description) { 222 + if (resolvedPayload && 'desc' in resolvedPayload && !('description' in resolvedPayload)) {
223 mergedPayload.description = resolvedPayload.desc 223 mergedPayload.description = resolvedPayload.desc
224 } 224 }
225 225
226 - if (resolvedPayload?.imgUrl && !resolvedPayload?.image) { 226 + if (resolvedPayload && 'imgUrl' in resolvedPayload && !('image' in resolvedPayload)) {
227 mergedPayload.image = resolvedPayload.imgUrl 227 mergedPayload.image = resolvedPayload.imgUrl
228 } 228 }
229 229
230 - if (resolvedPayload?.link && !resolvedPayload?.url) { 230 + if (resolvedPayload && 'link' in resolvedPayload && !('url' in resolvedPayload)) {
231 mergedPayload.url = resolvedPayload.link 231 mergedPayload.url = resolvedPayload.link
232 } 232 }
233 233
......