@@ -121,6 +121,12 @@ import {
121121 AppLogo ,
122122 AboutLogoImg ,
123123 AboutLogoList ,
124+ AuthorAvatar ,
125+ AuthorList ,
126+ BlogPostListCard ,
127+ BlogPostWrapper ,
128+ BlueskyComment ,
129+ BlueskyComments ,
124130 BaseCard ,
125131 BlueskyPostEmbed ,
126132 BuildEnvironment ,
@@ -2170,6 +2176,117 @@ describe('component accessibility audits', () => {
21702176 } )
21712177 } )
21722178
2179+ describe ( 'AuthorAvatar' , ( ) => {
2180+ it ( 'should have no accessibility violations with fallback text' , async ( ) => {
2181+ const component = await mountSuspended ( AuthorAvatar , {
2182+ props : {
2183+ author : {
2184+ name : 'Daniel Roe' ,
2185+ blueskyHandle : 'danielroe.dev' ,
2186+ avatar : null ,
2187+ profileUrl : 'https://bsky.app/profile/danielroe.dev' ,
2188+ } ,
2189+ } ,
2190+ } )
2191+ const results = await runAxe ( component )
2192+ expect ( results . violations ) . toEqual ( [ ] )
2193+ } )
2194+ } )
2195+
2196+ describe ( 'AuthorList' , ( ) => {
2197+ it ( 'should have no accessibility violations' , async ( ) => {
2198+ const component = await mountSuspended ( AuthorList , {
2199+ props : {
2200+ authors : [
2201+ { name : 'Daniel Roe' , blueskyHandle : 'danielroe.dev' } ,
2202+ { name : 'Salma Alam-Naylor' } ,
2203+ ] ,
2204+ } ,
2205+ } )
2206+ const results = await runAxe ( component )
2207+ expect ( results . violations ) . toEqual ( [ ] )
2208+ } )
2209+ } )
2210+
2211+ describe ( 'BlogPostWrapper' , ( ) => {
2212+ it ( 'should have no accessibility violations' , async ( ) => {
2213+ const component = await mountSuspended ( BlogPostWrapper , {
2214+ props : {
2215+ frontmatter : {
2216+ authors : [ { name : 'Daniel Roe' , blueskyHandle : 'danielroe.dev' } ] ,
2217+ title : 'Building Accessible Vue Components' ,
2218+ date : '2024-06-15' ,
2219+ description : 'A guide to building accessible components in Vue.js applications.' ,
2220+ path : '/blog/building-accessible-vue-components' ,
2221+ slug : 'building-accessible-vue-components' ,
2222+ } ,
2223+ } ,
2224+ slots : { default : '<p>Blog post content here.</p>' } ,
2225+ } )
2226+ const results = await runAxe ( component )
2227+ expect ( results . violations ) . toEqual ( [ ] )
2228+ } )
2229+ } )
2230+
2231+ describe ( 'BlueskyComment' , ( ) => {
2232+ it ( 'should have no accessibility violations' , async ( ) => {
2233+ const component = await mountSuspended ( BlueskyComment , {
2234+ props : {
2235+ comment : {
2236+ uri : 'at://did:plc:2gkh62xvzokhlf6li4ol3b3d/app.bsky.feed.post/3mcg7k75fdc2k' ,
2237+ cid : 'bafyreigincphooxt7zox3blbocf6hnczzv36fkuj2zi5iuzpjgq6gk6pju' ,
2238+ author : {
2239+ did : 'did:plc:2gkh62xvzokhlf6li4ol3b3d' ,
2240+ handle : 'patak.dev' ,
2241+ displayName : 'patak' ,
2242+ avatar :
2243+ 'https://cdn.bsky.app/img/avatar/plain/did:plc:2gkh62xvzokhlf6li4ol3b3d/bafkreifgzl4e5jqlakd77ajvnilsb5tufsv24h2sxfwmitkzxrh3sk6mhq@jpeg' ,
2244+ } ,
2245+ text : 'our kids will need these new stories, thanks for writing this Daniel' ,
2246+ createdAt : '2026-01-14T23:22:05.257Z' ,
2247+ likeCount : 13 ,
2248+ replyCount : 0 ,
2249+ repostCount : 0 ,
2250+ replies : [ ] ,
2251+ } ,
2252+ depth : 0 ,
2253+ } ,
2254+ } )
2255+ const results = await runAxe ( component )
2256+ expect ( results . violations ) . toEqual ( [ ] )
2257+ } )
2258+ } )
2259+
2260+ describe ( 'BlueskyComments' , ( ) => {
2261+ it ( 'should have no accessibility violations' , async ( ) => {
2262+ const component = await mountSuspended ( BlueskyComments , {
2263+ props : {
2264+ postUri : 'at://did:plc:jbeaa5kdaladzwq3r7f5xgwe/app.bsky.feed.post/3mcg6svsgsm2k' ,
2265+ } ,
2266+ } )
2267+ const results = await runAxe ( component )
2268+ expect ( results . violations ) . toEqual ( [ ] )
2269+ } )
2270+ } )
2271+
2272+ describe ( 'BlogPostListCard' , ( ) => {
2273+ it ( 'should have no accessibility violations' , async ( ) => {
2274+ const component = await mountSuspended ( BlogPostListCard , {
2275+ props : {
2276+ authors : [ { name : 'Daniel Roe' , blueskyHandle : 'danielroe.dev' } ] ,
2277+ title : 'Building Accessible Vue Components' ,
2278+ topics : [ 'accessibility' , 'vue' ] ,
2279+ excerpt : 'A guide to building accessible components in Vue.js applications.' ,
2280+ published : '2024-06-15' ,
2281+ path : 'building-accessible-vue-components' ,
2282+ index : 0 ,
2283+ } ,
2284+ } )
2285+ const results = await runAxe ( component )
2286+ expect ( results . violations ) . toEqual ( [ ] )
2287+ } )
2288+ } )
2289+
21732290 describe ( 'PackageReplacement' , ( ) => {
21742291 it ( 'should have no accessibility violations for native replacement' , async ( ) => {
21752292 const component = await mountSuspended ( PackageReplacement , {
0 commit comments