0
0
mirror of https://github.com/naturalcrit/homebrewery.git synced 2026-01-06 16:32:40 +00:00
This commit is contained in:
Trevor Buckner
2024-07-28 18:03:25 -04:00
parent 88eaebfd49
commit 8221579b6a
5 changed files with 74 additions and 74 deletions

View File

@@ -225,7 +225,7 @@ const MetadataEditor = createClass({
dropdown = dropdown =
<Nav.dropdown className='value' trigger='click'> <Nav.dropdown className='value' trigger='click'>
<div> {currentTheme.author ?? _.upperFirst(currentRenderer)} : {currentTheme.name} <i className='fas fa-caret-down'></i> </div> <div> {currentTheme.author ?? _.upperFirst(currentRenderer)} : {currentTheme.name} <i className='fas fa-caret-down'></i> </div>
{listThemes(currentRenderer)} {listThemes(currentRenderer)}
</Nav.dropdown>; </Nav.dropdown>;
} }

View File

@@ -111,7 +111,7 @@ const ErrorNavItem = createClass({
Looks like there was a problem retreiving Looks like there was a problem retreiving
the theme, or a theme that it inherits, the theme, or a theme that it inherits,
for this brew. Verify that brew <a className='lowercase' target='_blank' rel='noopener noreferrer' href={`/share/${response.body.brewId}`}> for this brew. Verify that brew <a className='lowercase' target='_blank' rel='noopener noreferrer' href={`/share/${response.body.brewId}`}>
{response.body.brewId}</a> still exists! {response.body.brewId}</a> still exists!
</div> </div>
</Nav.item>; </Nav.item>;
} }

View File

@@ -272,7 +272,7 @@ const api = {
await api.getBrew('share')(req, res, ()=>{}) await api.getBrew('share')(req, res, ()=>{})
.catch((err)=>{ .catch((err)=>{
if(err.HBErrorCode == '05') if(err.HBErrorCode == '05')
err = {...err, name: 'ThemeLoad Error', message: 'Theme Not Found', HBErrorCode: '09'}; err = { ...err, name: 'ThemeLoad Error', message: 'Theme Not Found', HBErrorCode: '09' };
throw err; throw err;
}); });

View File

@@ -581,118 +581,118 @@ brew`);
}); });
}); });
describe('Theme bundle', () => { describe('Theme bundle', ()=>{
it('should return Theme Bundle for a User Theme', async () => { it('should return Theme Bundle for a User Theme', async ()=>{
const brews = { const brews = {
userThemeAID: { title: 'User Theme A', renderer: 'V3', theme: null, shareId: 'userThemeAID', style: 'User Theme A Style' } userThemeAID : { title: 'User Theme A', renderer: 'V3', theme: null, shareId: 'userThemeAID', style: 'User Theme A Style' }
}; };
const toBrewPromise = (brew) => new Promise((res) => res({ toObject: () => brew })); const toBrewPromise = (brew)=>new Promise((res)=>res({ toObject: ()=>brew }));
model.get = jest.fn((getParams) => toBrewPromise(brews[getParams.shareId])); model.get = jest.fn((getParams)=>toBrewPromise(brews[getParams.shareId]));
const req = { params: { renderer: "V3", id: "userThemeAID" }, get: () => { return 'localhost'; }, protocol: 'https' }; const req = { params: { renderer: 'V3', id: 'userThemeAID' }, get: ()=>{ return 'localhost'; }, protocol: 'https' };
await api.getThemeBundle(req, res); await api.getThemeBundle(req, res);
expect(res.status).toHaveBeenCalledWith(200); expect(res.status).toHaveBeenCalledWith(200);
expect(res.send).toHaveBeenCalledWith({ expect(res.send).toHaveBeenCalledWith({
styles: ["/* From Brew: https://localhost/share/userThemeAID */\n\nUser Theme A Style"], styles : ['/* From Brew: https://localhost/share/userThemeAID */\n\nUser Theme A Style'],
snippets: [] snippets : []
}); });
}); });
it('should return Theme Bundle for nested User Themes', async () => { it('should return Theme Bundle for nested User Themes', async ()=>{
const brews = { const brews = {
userThemeAID: { title: 'User Theme A', renderer: 'V3', theme: 'userThemeBID', shareId: 'userThemeAID', style: 'User Theme A Style' }, userThemeAID : { title: 'User Theme A', renderer: 'V3', theme: 'userThemeBID', shareId: 'userThemeAID', style: 'User Theme A Style' },
userThemeBID: { title: 'User Theme B', renderer: 'V3', theme: 'userThemeCID', shareId: 'userThemeBID', style: 'User Theme B Style' }, userThemeBID : { title: 'User Theme B', renderer: 'V3', theme: 'userThemeCID', shareId: 'userThemeBID', style: 'User Theme B Style' },
userThemeCID: { title: 'User Theme C', renderer: 'V3', theme: null, shareId: 'userThemeCID', style: 'User Theme C Style' } userThemeCID : { title: 'User Theme C', renderer: 'V3', theme: null, shareId: 'userThemeCID', style: 'User Theme C Style' }
}; };
const toBrewPromise = (brew) => new Promise((res) => res({ toObject: () => brew })); const toBrewPromise = (brew)=>new Promise((res)=>res({ toObject: ()=>brew }));
model.get = jest.fn((getParams) => toBrewPromise(brews[getParams.shareId])); model.get = jest.fn((getParams)=>toBrewPromise(brews[getParams.shareId]));
const req = { params: { renderer: "V3", id: "userThemeAID" }, get: () => { return 'localhost'; }, protocol: 'https' }; const req = { params: { renderer: 'V3', id: 'userThemeAID' }, get: ()=>{ return 'localhost'; }, protocol: 'https' };
await api.getThemeBundle(req, res); await api.getThemeBundle(req, res);
expect(res.status).toHaveBeenCalledWith(200); expect(res.status).toHaveBeenCalledWith(200);
expect(res.send).toHaveBeenCalledWith({ expect(res.send).toHaveBeenCalledWith({
styles: [ styles : [
"/* From Brew: https://localhost/share/userThemeCID */\n\nUser Theme C Style", '/* From Brew: https://localhost/share/userThemeCID */\n\nUser Theme C Style',
"/* From Brew: https://localhost/share/userThemeBID */\n\nUser Theme B Style", '/* From Brew: https://localhost/share/userThemeBID */\n\nUser Theme B Style',
"/* From Brew: https://localhost/share/userThemeAID */\n\nUser Theme A Style" '/* From Brew: https://localhost/share/userThemeAID */\n\nUser Theme A Style'
], ],
snippets: [] snippets : []
}); });
}); });
it('should return Theme Bundle for a Static Theme', async () => { it('should return Theme Bundle for a Static Theme', async ()=>{
const req = { params: { renderer: "V3", id: "5ePHB" }, get: () => { return 'localhost'; }, protocol: 'https' }; const req = { params: { renderer: 'V3', id: '5ePHB' }, get: ()=>{ return 'localhost'; }, protocol: 'https' };
await api.getThemeBundle(req, res); await api.getThemeBundle(req, res);
expect(res.status).toHaveBeenCalledWith(200); expect(res.status).toHaveBeenCalledWith(200);
expect(res.send).toHaveBeenCalledWith({ expect(res.send).toHaveBeenCalledWith({
styles: [ styles : [
`/* From Theme Blank */\n\n@import url("/themes/V3/Blank/style.css");`, `/* From Theme Blank */\n\n@import url("/themes/V3/Blank/style.css");`,
`/* From Theme 5ePHB */\n\n@import url("/themes/V3/5ePHB/style.css");` `/* From Theme 5ePHB */\n\n@import url("/themes/V3/5ePHB/style.css");`
], ],
snippets: [ snippets : [
"V3_Blank", 'V3_Blank',
"V3_5ePHB" 'V3_5ePHB'
] ]
}); });
}); });
it('should return Theme Bundle for nested User and Static Themes together', async () => { it('should return Theme Bundle for nested User and Static Themes together', async ()=>{
const brews = { const brews = {
userThemeAID: { title: 'User Theme A', renderer: 'V3', theme: 'userThemeBID', shareId: 'userThemeAID', style: 'User Theme A Style' }, userThemeAID : { title: 'User Theme A', renderer: 'V3', theme: 'userThemeBID', shareId: 'userThemeAID', style: 'User Theme A Style' },
userThemeBID: { title: 'User Theme B', renderer: 'V3', theme: 'userThemeCID', shareId: 'userThemeBID', style: 'User Theme B Style' }, userThemeBID : { title: 'User Theme B', renderer: 'V3', theme: 'userThemeCID', shareId: 'userThemeBID', style: 'User Theme B Style' },
userThemeCID: { title: 'User Theme C', renderer: 'V3', theme: '5eDMG', shareId: 'userThemeCID', style: 'User Theme C Style' } userThemeCID : { title: 'User Theme C', renderer: 'V3', theme: '5eDMG', shareId: 'userThemeCID', style: 'User Theme C Style' }
}; };
const toBrewPromise = (brew) => new Promise((res) => res({ toObject: () => brew })); const toBrewPromise = (brew)=>new Promise((res)=>res({ toObject: ()=>brew }));
model.get = jest.fn((getParams) => toBrewPromise(brews[getParams.shareId])); model.get = jest.fn((getParams)=>toBrewPromise(brews[getParams.shareId]));
const req = { params: { renderer: "V3", id: "userThemeAID" }, get: () => { return 'localhost'; }, protocol: 'https' }; const req = { params: { renderer: 'V3', id: 'userThemeAID' }, get: ()=>{ return 'localhost'; }, protocol: 'https' };
await api.getThemeBundle(req, res); await api.getThemeBundle(req, res);
expect(res.status).toHaveBeenCalledWith(200); expect(res.status).toHaveBeenCalledWith(200);
expect(res.send).toHaveBeenCalledWith({ expect(res.send).toHaveBeenCalledWith({
styles: [ styles : [
`/* From Theme Blank */\n\n@import url("/themes/V3/Blank/style.css");`, `/* From Theme Blank */\n\n@import url("/themes/V3/Blank/style.css");`,
`/* From Theme 5ePHB */\n\n@import url("/themes/V3/5ePHB/style.css");`, `/* From Theme 5ePHB */\n\n@import url("/themes/V3/5ePHB/style.css");`,
`/* From Theme 5eDMG */\n\n@import url("/themes/V3/5eDMG/style.css");`, `/* From Theme 5eDMG */\n\n@import url("/themes/V3/5eDMG/style.css");`,
"/* From Brew: https://localhost/share/userThemeCID */\n\nUser Theme C Style", '/* From Brew: https://localhost/share/userThemeCID */\n\nUser Theme C Style',
"/* From Brew: https://localhost/share/userThemeBID */\n\nUser Theme B Style", '/* From Brew: https://localhost/share/userThemeBID */\n\nUser Theme B Style',
"/* From Brew: https://localhost/share/userThemeAID */\n\nUser Theme A Style" '/* From Brew: https://localhost/share/userThemeAID */\n\nUser Theme A Style'
], ],
snippets: [ snippets : [
"V3_Blank", 'V3_Blank',
"V3_5ePHB", 'V3_5ePHB',
"V3_5eDMG" 'V3_5eDMG'
] ]
}); });
}); });
it('should fail for an invalid Theme in the chain', async()=>{ it('should fail for an invalid Theme in the chain', async()=>{
const brews = { const brews = {
userThemeAID: { title: 'User Theme A', renderer: 'V3', theme: 'missingTheme', shareId: 'userThemeAID', style: 'User Theme A Style' }, userThemeAID : { title: 'User Theme A', renderer: 'V3', theme: 'missingTheme', shareId: 'userThemeAID', style: 'User Theme A Style' },
}; };
const toBrewPromise = (brew) => new Promise((res) => res({ toObject: () => brew })); const toBrewPromise = (brew)=>new Promise((res)=>res({ toObject: ()=>brew }));
model.get = jest.fn((getParams) => toBrewPromise(brews[getParams.shareId])); model.get = jest.fn((getParams)=>toBrewPromise(brews[getParams.shareId]));
const req = { params: { renderer: "V3", id: "userThemeAID" }, get: () => { return 'localhost'; }, protocol: 'https' }; const req = { params: { renderer: 'V3', id: 'userThemeAID' }, get: ()=>{ return 'localhost'; }, protocol: 'https' };
let err let err;
await api.getThemeBundle(req, res) await api.getThemeBundle(req, res)
.catch(e => err = e); .catch((e)=>err = e);
expect(err).toEqual({ expect(err).toEqual({
HBErrorCode : "09", HBErrorCode : '09',
accessType : "share", accessType : 'share',
brewId : "missingTheme", brewId : 'missingTheme',
message : "Theme Not Found", message : 'Theme Not Found',
name : "ThemeLoad Error", name : 'ThemeLoad Error',
status : 404}); status : 404 });
}); });
}); });

View File

@@ -34,19 +34,19 @@ const printCurrentBrew = ()=>{
} }
}; };
const fetchThemeBundle = async (obj, renderer, theme) => { const fetchThemeBundle = async (obj, renderer, theme)=>{
const res = await request const res = await request
.get(`/api/theme/${renderer}/${theme}`) .get(`/api/theme/${renderer}/${theme}`)
.catch((err) => { .catch((err)=>{
obj.setState({ error: err }); obj.setState({ error: err });
}); });
if (!res) return; if(!res) return;
const themeBundle = res.body; const themeBundle = res.body;
themeBundle.joinedStyles = themeBundle.styles.map((style) => `<style>${style}</style>`).join('\n\n'); themeBundle.joinedStyles = themeBundle.styles.map((style)=>`<style>${style}</style>`).join('\n\n');
obj.setState((prevState) => ({ obj.setState((prevState)=>({
...prevState, ...prevState,
themeBundle: themeBundle themeBundle : themeBundle
})); }));
}; };